- 打卡等级:以坛为家II
- 打卡总天数:493
- 最近打卡:2025-05-01 08:31:58
荣誉版主
- 积分
- 3476
|
发表于 2024-6-5 17:11:30
|
显示全部楼层
为什么要“删掉文件夹中的 STC32G.H 文件,使用系统中的。”?
出于好奇,一探究竟。
原来的编译截图是这样的:
此时,STC32G.H文件在当前文件夹内,文件的开始就有 #include <intrins.h>的。
编译结果: 0错误,0警告。
删除当前文件夹内的STC32G.H文件。(编译器只能找系统中的STC32G.H了)
再编译... 果然...
出现找不到_nop_()的三条错误提示... 3错误...
打开系统中的...C251\INC\STC\STC32G.H
一看, STC32G.H文件开始是没有#include <intrins.h>的.
于是就建议在主程序中添加#include <intrins.h>. 否则编译就要错的...
探索到此, 是不是感觉兜了一个圈? 先删了后再添加, 多此一举了? 而且又缩小了intrins.h使用范围。
不过,对我等新手有一个重要的启示, 那就是STC32G.H是有可能多变的,不能一概而论,不能全部指望使用所谓系统中的。
于是再探...
在我计算机D盘(编程分区)内是搜索“STC32G.H”,结果找到一大堆。根据文件大小归纳了一下:
这些文件来自官方的屠龙刀DEMO、实验箱DEMO、降龙棍DEMO等文件包。
上述文件列表中,原文件名都是STC32G.h, 图示列表的文件名括弧内是文件长度字节。
显然,文件大小不同,内容一定是不同的。
其中STC32G(65526).h和STC32G(74002).h(这是来自系统的73K)两个文件的开始都没有#include <intrins.h>。
其余STC32G(xxxxx).H文件都含有 #include <intrins.h>,占绝大多数。
那么再思考一下,所谓系统中的STC32G.h是从何而来的?个人认为不会是由C251安装时自动生成的,而是STC-ISP软件在添加STC型号时加进去的。
那么再思考一点,为什么官方的DEMO程序包中都有一个COMM文件夹,其中存放着与DEMO板有关的相应的STC32G.h文件呢? 为什么不统一使用系统中的呢?
显然, STC32G.h 文件不是一成不变的, 而是要根据实际需要再组织来定义配置的。
基于这一点因素,将STC32G.h放在当前文件夹中(随实验项目放在一起)是必要的。
否则发送给别人使用,由于编译环境的不同,通常是要出错的。
即便是自己,若以后变换项目或变换编译环境了,也是会产生麻烦的。
在此有一个小小的建议:
官方STC-IAP软件是否可考虑,在要加入系统的STC32G.H文件中添加 #include <intrins.h>,
至少理由是软件提供的延时函数代码中包括_nop_()函数, 需要这个包含,这样可减少一些新手学习者们的困惑。
|
|