- 打卡等级:以坛为家II
- 打卡总天数:493
- 最近打卡:2025-05-01 08:31:58
荣誉版主
- 积分
- 3476
|
发表于 2024-6-5 09:18:55
|
显示全部楼层
感谢这位坛友的浏览和回复。
有句说“存在即合理”,
在你那里编译时,出现错误了提示。这一定是合理的,不能否认的,也一定是有缘由的。
在我这里编译时,没出现错误提示。这也定是合理的,不能否认的,也一定是有缘由的。
这就成了一个很有趣的话题。
再仔细分析一下,应该越来越清楚的。
试分析一下:
在Main.C文件中,因为使用了STC-ISP软件生成的1ms延时函数:
void Delay1ms(void);//@22.1184MHz
这函数其中使用了_nop_()语句, (看来就是它引出的问题了.)
这_nop_()语句就是一个宏, 它定义在"intrins.h"中.
那么, 在原Main.C中, 首先包含了STC32G.h文件. 而STC32G.h中首先就包含了<intrins.h>,因此只要包含了STC32G.h,就是包含了intrins.h.h,也就是包含了_nop_()宏定义.
所以在我这里编译,是0错误0警告,没出现关于_nop_()找不到的错误提示,
然而, 如果诚如坛友所建议, 删除STC32G.h, 改用 "STC32_STC8_usb.h",
在这样的条件下,
因为STC32_STC8_usb.h中不包含intrins.h.h,所以在编译时,找不到_nop_的宏定义,就会出现了楼上所示的错误提示.
为了克服这错误提示, 因此坛友还建议在Main.C中加入#include "intrins.h". 这没错,也是合理的。
再来看看, STC32_STC8_usb.h, 这其中包含了包含u8, u16 定义,这当然是知道的.
为了包含u8和u16的定义,而删除STC32G.h,是否合适?
这样一来,除了引发了上述由于删除STC32G.h而引起的新问题不说.
再看看STC32_STC8_usb.h其中的内容是什么,它能包含STC32G.h的内容吗?
除了
typedef unsigned char u8;
typedef unsigned int u16;
.....
这样的定义外, 还包含了
SEG7...
LCD12864...
OLED12864...
等多种外设的定义.
尽管只有定义说明, 没有函数实现,也没有使用, 不会影响编译, 但是对于本驱动LCD_7735的实验来说,个人还是认为是没有必要删除STC32G.h而用STC32_STC8_usb.h来替代的.
其实为了使用u8,u16定义, 只要建议在使用前在某个地方定义一下即可了,千万不要建议删除非常重要的STC32G.h。
仅供参考。
|
|