keilC251定义常量使用code还是const
在中断里使用code定义常量发现程序无法正常运行,但用const就能运行
在C251中使用code和const的区别是啥
const code是FLASH,const是SRAM DebugLab 发表于 2024-10-21 10:11
code是FLASH,const是SRAM
那用const定义的局部变量退出函数后会被释放吗 1. const修饰:
表示被修饰对象是一个不可修改的常量。在申明时初始化,并且在程序运行期间不能被修改。
该常量被keil C51编译器放置在RAM空间。
用于存储常量数据,比如查找表、常量配置等。在使用时,可以直接读取,但不能进行赋值操作。
2. code修饰:
表示被修饰对象放置在ROM空间,也就是存放程序指令的区域。
用于存储不变的、只读的程序指令或数据。由于放置在代码区,可以节省宝贵的RAM存储空间。
他们都有不可修改的特性,但一般存储在RAM区的数据访问会更快一些,对运行速度有要求的可以优先考虑const。
QQ624353765 发表于 2024-10-21 11:13
那用const定义的局部变量退出函数后会被释放吗
应该是会的,const只是声明是常量,不可修改,其实flash中也有一份相同的,运行时复制到sram c251有bug,用code修饰变量需放在函数外面,做全局变量。
如果局部变量用code修饰,则运行异常,看汇编代码就知,变量地址分配在code区域,上来就是一通写入,自然是运行不下去。
如果局部变量用const,则变量分配在RAM区,进入函数时先从code区域的镜像复制数据到变量来初始化。此种情况运行结果是正确的,但是浪费data空间,浪费code空间,浪费时间。 health 发表于 2024-10-21 12:45
c251有bug,用code修饰变量需放在函数外面,做全局变量。
如果局部变量用code修饰,则运行异常,看汇编代码 ...
竟然还有这种问题,看来code做修饰要小心啊,sram够大还是const修饰好点啊 const把,感觉还是8h好用 最优方案是code数组拖到函数外面。
页:
[1]
2