嵌入式(三):keil中有趣的错误

1、遇到了一个有趣的错误,在这里记录一下:如果遇到main.c(32): error C264: intrinsic ‘nop’: declaration/activation error这个错误,可以通过引入intrins.h库解决。

2、还遇到了一个更有趣的错误,就是蹦出来一个窗口,提示Error: Encountered an improper argument,经过测试发现,这是keil自身的BUG,如果在项目路径中存在亚洲字符有几率触发,或许可以当成一个小彩蛋,只能通过任务管理器关闭。

3、有一点要注意,在仿真检查counter的时候,会发现j的值,在执行完j=myID之后是正常的,但在执行i_max=j/8之后会发生突变,会变成一个不正常的值,原本我的理解是可能发生了自除,群里的讨论结果是由于看空间被删除导致乱码。但后续和别人讨论的时候发现了这个并不准确,首先看两张图:
在这里插入图片描述在这里插入图片描述
可以看到,j的数据被存储在r6和r7两个8位寄存器之中,然后在执行完j的赋值语句后,两个寄存器分别变成了FA和E0,即j的高八位和低八位。
但是在执行完i_max的赋值语句后,出现了这样的情况:
在这里插入图片描述
可以看到,r6寄存器被借用了,用来存储i_max变量的高八位if,所以j的值就变成了1FE0
所以,之前讨论出来的结果并不是错的,的确j由于在之后没有使用的情况,所以编辑器认为他的空间可以不再进行保留,但是并没有直接清除,而是保留了值,所以我们在调试的时候仍旧可以查看他的值,但是他的空间可以被其他的变量所占用。

4、C51数据类型:

数据类型 C51 C
char 8 8
int 16 32(32/64位)/16(16位)
long 32 32
float 32 32
double 32 64
发布了291 篇原创文章 · 获赞 178 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_40851744/article/details/105058004