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 |