问题1:I2Cms 是定义的全局变量,I2Cms 在1毫秒定时器里累加,现在的问题
I2Cms = 0;
while(I2Cms<=10)
{
}
这个while根本没法跳出,我用仿真器看了,定时器里的I2Cms 一直在累加,不管I2Cms 的是多少,这个while循环好像都不比较,汇编如下
1961 ; 312 I2Cms = 0;
1963 0231 4f clr a
1964 0232 c70002 ld _I2Cms,a
1965 0235 L5401:
1966 ; 313 while(I2Cms<=10)
1968 0235 a10b cp a,#11
1969 0237 25fc jrult L5401
第二个问题是:
memcpy_xx(ce_data.costbak.B_ws,ws,40);这样一个函数
ce_data.costbak.B_ws,ws这2个数组如果放在0x0100后面,就老是报错越界,但是我把这2个数组定义在0x0200后,就不会再报错,怎么搞不明白为什么!
void memcpy_xx (unsigned char *dst, unsigned char *src, unsigned char len)
{
while (len--)
*dst++ = *src++;
}
; 89 void memcpy_xx (unsigned char *dst, unsigned char *src, unsigned char len)
1222 ; 90 {
1223 switch .text
1225 xref _memcpy_xx$L
1226 007e _memcpy_xx:
1228 007e c70001 ld _memcpy_xx$L+1,a
1229 0081 cf0000 ld _memcpy_xx$L,x
1231 0084 202e jra L775
1232 0086 L575:
第一个问题请用volatile。第二个问题要看具体存储分配
关于第二个问题请看看.map文件中的存储分配,或看看报错信息。
我脱离仿真器,直接烧录程序运行,问题依然存在
我脱离仿真器,直接烧录程序运行,问题依然存在
回3楼:请看2楼的回答!
给你的回答,自己不看!!
不好意思,我没仔细看,我试试
不好意思,我没仔细看,我试试