[PIC®/AVR®/dsPIC®产品] 关于const类型变量使用的问题,请大侠指点,谢谢!

[复制链接]
 楼主| LiangZen 发表于 2019-2-26 11:08 | 显示全部楼层 |阅读模式
本帖最后由 LiangZen 于 2019-2-26 11:11 编辑

详细请参考附件,附件是完整的工程,问题描述也main.c中有描述: //CRC校验
const unsigned int crc16L[] = \
{
    0x0000, 0xC0C1, 0xC181, 0x0140,
    0xC301, 0x03C0, 0x0280, 0xC241,
    0xC601, 0x06C0, 0x0780, 0xC741,
    0x0500, 0xC5C1, 0xC481, 0x0440,
};
const unsigned int crc16H[] = \
{
   0x0000, 0xCC01, 0xD801, 0x1400,
   0xF001, 0x3C00, 0x2800, 0xE401,
   0xA001, 0x6C00, 0x7800, 0xB401,
   0x5000, 0x9C01, 0x8801, 0x4400,
};
unsigned int  i_a;
unsigned int  i_b;
while (1)
    {
        // Add your application code
        i_a = crc16L[3];
        if(i_a == 0x0140){
            i_b = 1;
            NOP();
        } else {
            NOP();
            i_b = 0;
        }
        // The problem is :The variable crc16L cannot be assigned to i_a, Why?
        NOP();
        NOP();
    }

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评论

xch
被编译器优化了  发表于 2019-2-28 09:17
 楼主| LiangZen 发表于 2019-2-26 11:13 | 显示全部楼层
如果单单从程序看不出问题,可以下载附件模拟运行试试,结果是i_b = 0;
 楼主| LiangZen 发表于 2019-2-26 11:15 | 显示全部楼层
使用的芯片是pic18f66k40, 奇怪的是这段代码在其它芯片上运行是没有问题,在这款片子上就出问题;工程编译又没有问题,所以想请高手帮忙,谢谢!
aqawasaz 发表于 2019-2-26 15:00 | 显示全部楼层
理论上应该不会有这个问题,可能是跟环境配置有关,也可以再仔细看下芯片手册。
CoolSilicon 发表于 2019-2-26 15:56 | 显示全部楼层
你编译器用free模式, 然后软仿试试看......
oxygenzz 发表于 2019-2-26 16:33 | 显示全部楼层
LiangZen 发表于 2019-2-26 11:13
如果单单从程序看不出问题,可以下载附件模拟运行试试,结果是i_b = 0;

程序软件仿真跑了一下,没看到问题。

楼主的程序里说,i_a 如果没有得到正确的值,实际得到的是什么值?
有看过flash里面的crc16L常量数组数据都对吗?
handlike 发表于 2019-2-26 17:02 | 显示全部楼层
如果把   unsigned int   都改成unsigned short int 呢?   
 楼主| LiangZen 发表于 2019-2-27 09:53 | 显示全部楼层
oxygenzz 发表于 2019-2-26 16:33
程序软件仿真跑了一下,没看到问题。

楼主的程序里说,i_a 如果没有得到正确的值,实际得到的是什么值? ...

crc16L的数据都对,但是i_a的数据都是0
 楼主| LiangZen 发表于 2019-2-27 10:35 | 显示全部楼层
handlike 发表于 2019-2-26 17:02
如果把   unsigned int   都改成unsigned short int 呢?

改成unsigned short int 效果一样,i_a 还是给不到值,是“0”
lcczg 发表于 2019-2-27 10:36 | 显示全部楼层
我在用GCC编译AVR芯片时会碰到这种问题。这就需要用memory的驱动去读了,例如 FLASH_ReadWord()。可以在MCC里添加memory外设,里面有驱动代码。
 楼主| LiangZen 发表于 2019-2-27 10:37 | 显示全部楼层
附件图片是我实时在线仿真的图片,仿真结果还是i_a = 0, 没有按我预期的0x0140; 不知道为什么?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| LiangZen 发表于 2019-2-27 10:40 | 显示全部楼层
oxygenzz 发表于 2019-2-26 16:33
程序软件仿真跑了一下,没看到问题。

楼主的程序里说,i_a 如果没有得到正确的值,实际得到的是什么值? ...

从仿真看crc16L寄存器的值,都是正确的;crc16L[3] = 0x0140
 楼主| LiangZen 发表于 2019-2-27 10:54 | 显示全部楼层
在线仿真 flash里面的数据是对的,但是就是给值不成功,不知道为啥?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| LiangZen 发表于 2019-2-27 11:40 | 显示全部楼层
lcczg 发表于 2019-2-27 10:36
我在用GCC编译AVR芯片时会碰到这种问题。这就需要用memory的驱动去读了,例如 FLASH_ReadWord()。可以在M ...

我还有感温包的温度表,好多,都改成这种方式是不是会很麻烦;关键我还是想找出 出现这种问题的原因;
oxygenzz 发表于 2019-2-27 11:58 | 显示全部楼层
楼主,试一下附件的工程,看是否在K40芯片上能正常工作?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| LiangZen 发表于 2019-2-27 12:53 | 显示全部楼层
正常了!什么问题?怎么解决的?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| LiangZen 发表于 2019-2-27 12:54 | 显示全部楼层
oxygenzz 发表于 2019-2-27 11:58
楼主,试一下附件的工程,看是否在K40芯片上能正常工作?

用你的工程可以哦,有什么区别吗?和我的;
oxygenzz 发表于 2019-2-27 13:55 | 显示全部楼层
要按照下面文档里面的步骤去做,具体的看一下文档吧,第4页 3.1节:
http://ww1.microchip.com/downloa ... rrata-80000714E.pdf
CoolSilicon 发表于 2019-2-27 14:18 | 显示全部楼层
LiangZen 发表于 2019-2-27 12:53
正常了!什么问题?怎么解决的?

有时候 X IDE的观测窗口可能刷新有点问题..重启一下IDE就好了...
 楼主| LiangZen 发表于 2019-2-27 16:32 | 显示全部楼层
问题已解决,多谢各位大侠!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

21

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部