keil中 int uint16_t 数据类型的一点问题

2019-10-16 06:50发布

    之前在C2000 用的modbus程序 移植到 cortex M0M3核的芯片上后,遇到向寄存器写入的时候程序偶尔会跑飞。
    直到有一天,忽然注意到keil里面默认的 unsigned int 、 int 类型是32位 而 uint16_t 是16位。CCS里面 int 、unsigned int 和 uint16_t 都是16位。

    而我一直认为int  是16位的呀

    在程序中有一步操作
    int *p;
    uint16_t reg ;
    uint16_t temp;

    p=(int *)®
    *p=temp;  //-----程序在这里跑飞啦----

  后来数据类型全部改为一致,问题解决。
  记得以前C语言教科书有提到:不同的系统数据类型的长度也许是不一样的!








友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
lavion
1楼-- · 2019-10-16 09:05
这个就是基础知识,     整形   短整形  长整形    都不一定 是谁长谁短,      这种不同MCU  不同编译器的,   同个声明 代表不同字长   很正常.   
小陀螺爱炒蛋
2楼-- · 2019-10-16 10:23
16位也要分有没有符号的类型呀~
憨厚诚实大叔
3楼-- · 2019-10-16 15:43
所以我都是直接u16,u8,u32这样啦

一周热门 更多>