同样一段代码, 在KEIL C51 编译通过。 KEIL C251 编译报错。 这个错误是什么意思。
望解惑
/--------------分割线---------------------------/
keil C51 常见错误和警告
可以借鉴下
https://blog.csdn.net/tianpu2320959696/article/details/121571105
这是因为C51和C251的数据定义不一样啊,为啥要用C251取编译C51的程序昵
回答引用ChatGPT:
KEIL C251中的错误消息“warning C188:'parameter 2':value truncated”表示传递给函数的第二个参数被截断,因为它大于参数的数据类型。在这种情况下,当将第二个参数定义为uint8_t时,它是一个8位数据类型,它只能保持255(0xFF)的最大值,因此如果传递给函数的值超过255,它将被截断并导致此警告消息。
要解决此问题,您可以将第二个参数的数据类型更改为uint16_t,或者确保传递给函数的值不超过255的最大值。
以下内容部分参考ChatGPT模型:
根据错误提示,C188是C251编译器的一个错误代码,表示 "re-entrancy code detected",也就是发现了可重入代码。这通常是由于在中断服务程序中调用了不可重入的函数导致的。
解决思路:
示例代码:
//错误示例,中断服务程序中调用了不可重入的函数
void interrupt_service() {
int x = rand(); //不可重入函数
//...
}
//修改后的示例,中断服务程序中调用了可重入的函数
void interrupt_service() {
int x = rand_r(); //可重入函数
//...
}
//示例,使用互斥量保证资源互斥访问
void interrupt_service() {
mutex_lock(); //获取互斥量
//使用共享资源
mutex_unlock(); //释放互斥量
}
//示例,使用循环替代递归函数
int factorial(int n) {
if(n == 0) {
return 1;
}
return n * factorial(n-1); //递归调用
}
//修改后的示例,使用循环
int factorial(int n) {
int result = 1;
for(int i = 1; i <= n; i++) {
result *= i;
}
return result;
}
1、软件包下载完成之后,我们双击 C51V901.exe 这个应用程序,弹出如下所示对话框。
点击 Next 按钮。 弹出如下对话框。
打勾,然后点击 Next 按钮,弹出如下对话框
点击红框 1 选择软件安装的路径,我们这里在 D 盘内新建一个文件夹,命名为 KEILC51,将其安装到该文件夹内,方便软件的管理。
特别要注意:
(1)软件安装保存路径不能出现中文或者特殊字符,否则会出现很多奇怪的错误,到时候很难找问题。
(2)不要将 KEIL5 软件和 KEIL4 或者 51 的 KEIL 安装在一个文件夹内。
然后点击 Next ,弹出如下的对话框。
在红色框 1 和 2 中我们随便输入一些东西, 我们这里输入数字 666, 当然也可以输入空格, 但是一定要输入, 否则红色框 3 就一直是灰色状态, 输入完成后点击 Next, 弹出如下对话框。
说明 KEIL C51 软件正在安装,只要等一段时间即可,安装完成以后会出现如下界面。
点击 Finish 完成安装。KEIL C51 安装完成后在电脑桌面上一般会有一个快捷方式,如下所示:
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
C188错误在KEIL C251中是指输出格式字符串中格式说明符与关联参数类型不匹配。通常在printf函数或类似函数中出现。
例如,如果你使用了"printf("%d",i);"来输出一个整数i,但实际上i是一个长整型,则会出现C188错误。
解决方法是将格式说明符修改为匹配的类型。对于上述例子,可以将代码改为"printf("%ld", i);"。
需要注意的是,C188错误可能会和其他错误一起出现,因此需要仔细检查代码以确定哪个错误导致了编译错误。
如果您能提供出错的代码和详细的错误信息,我可以更具体地帮您解决问题。
如果我的回答解决了您的问题,请采纳!
C51的库与C251的不一样,当然朋友你如果非要这么用,可以自己添加个.h文件,把它定义进去即可,望采纳谢谢啦
您好,根据提供的信息判断,你这改成uint8_t的话就办法按照原先的方式发送高8位和低8位了。你使用uint8_t就溢出了,无法满足原先的使用要求。望采纳~~谢谢啦
c
int g_NewFollow_Flag; //将数据类型改为int
...
if(!g_NewFollow_Flag)
...
c
unsigned char g_NewFollow_Flag;
...
if(~g_NewFollow_Flag)
...