香水城,再请教你2个问题,cosmicc的环境st72324

hacky222   2009-4-4 14:32 楼主
问题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:

回复评论 (5)

第一个问题请用volatile。第二个问题要看具体存储分配

                                 关于第二个问题请看看.map文件中的存储分配,或看看报错信息。
点赞  2009-4-5 09:11

那第一个问题呢?

                                 那第一个问题呢?
点赞  2009-4-7 08:53

我脱离仿真器,直接烧录程序运行,问题依然存在

                                 我脱离仿真器,直接烧录程序运行,问题依然存在
点赞  2009-4-7 09:11

回3楼:请看2楼的回答!

                                 给你的回答,自己不看!!
点赞  2009-4-7 12:51

不好意思,我没仔细看,我试试

                                 不好意思,我没仔细看,我试试
点赞  2009-4-7 13:32
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复