从程序的角度分析单片机中用到的常量和变量的数据类型

2019-07-15 18:47发布

前两天面试去,面试官是个做c/c++语言,通信编程的,他问了几个关于单片机用到的数据类型的问题,把我问傻了。做单片机从来没有仔细考虑过这个问题,做了半年了,突然觉着自己白搞了一样。
拿msp430为例:
#define DIVS0               (0x02)        /* SMCLK Divider 0 */
DIVS0被常数00000010赋值,0x02是char型的吗?那么DIVS0是什么型的?
再比如:#define CPUOFF              (0x0010u)
0x0010u是无符号整形的吧,那么CPUOFF是什么型的?接着如下
#define LPM0                (CPUOFF)
那么定义的LPM0又是什么类型的?
从前知识照着demo去编写程序,确没有从软件的角度去分析过,有没有牛人过来指点一下?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
ntmusic
1楼-- · 2019-07-15 23:06
我觉得宏定义只是名称和数值,具体类型与实际程序中使用这个宏的位置和编译器有关
715690380
2楼-- · 2019-07-16 01:37
 精彩回答 2  元偷偷看……
ntmusic
3楼-- · 2019-07-16 02:39
715690380 发表于 2014-8-15 12:48
对,define相当于替换。但是对于表达式来说,左端为变量,所以它的类型肯定是已经确定的了,那么给寄存器 ...

个人理解:编译平台通常都是有针对性对某些MCU编程,比如在建立工程文件前需要选择MCU型号等,这一过程也许就已经将MCU的各个寄存器地址的寄存器类型已做了预处理,比如32位、16位还是8位。寄存器赋值都是无符号数的吧,因为有符号数意义不大。
715690380
4楼-- · 2019-07-16 05:38
ntmusic 发表于 2014-8-15 13:15
个人理解:编译平台通常都是有针对性对某些MCU编程,比如在建立工程文件前需要选择MCU型号等,这一过程也 ...

说的太对了,一语点破!
u8、u16~

我是草重
5楼-- · 2019-07-16 06:39
这一点确实需要注意总结,

一周热门 更多>