找回密码
 立即注册
查看: 900|回复: 17

keilC251定义常量使用code还是const

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:434
  • 最近打卡:2025-05-01 20:16:58
已绑定手机

229

主题

328

回帖

1471

积分

金牌会员

积分
1471
发表于 2024-10-21 07:47:25 | 显示全部楼层 |阅读模式
d2143cf5-940d-4f99-8b23-94472208ab92.png


在中断里使用code定义常量发现程序无法正常运行,但用const就能运行

在C251中使用code和const的区别是啥
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:375
  • 最近打卡:2025-04-26 15:51:33
已绑定手机

27

主题

301

回帖

822

积分

高级会员

积分
822
发表于 2024-10-21 09:05:36 | 显示全部楼层
const
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2024-10-21 10:11:30 | 显示全部楼层
code是FLASH,const是SRAM
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:434
  • 最近打卡:2025-05-01 20:16:58
已绑定手机

229

主题

328

回帖

1471

积分

金牌会员

积分
1471
发表于 2024-10-21 11:13:08 | 显示全部楼层
Debu*** 发表于 2024-10-21 10:11
code是FLASH,const是SRAM

那用const定义的局部变量退出函数后会被释放吗

点评

应该是会的,const只是声明是常量,不可修改,其实flash中也有一份相同的,运行时复制到sram  详情 回复 发表于 2024-10-21 12:17
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:177
  • 最近打卡:2025-04-30 13:52:43

10

主题

134

回帖

993

积分

高级会员

积分
993
发表于 2024-10-21 11:14:31 | 显示全部楼层
1. const修饰:
     表示被修饰对象是一个不可修改的常量。在申明时初始化,并且在程序运行期间不能被修改。
     该常量被keil C51编译器放置在RAM空间。
     用于存储常量数据,比如查找表、常量配置等。在使用时,可以直接读取,但不能进行赋值操作。
2. code修饰:
     表示被修饰对象放置在ROM空间,也就是存放程序指令的区域。
     用于存储不变的、只读的程序指令或数据。由于放置在代码区,可以节省宝贵的RAM存储空间。

他们都有不可修改的特性,但一般存储在RAM区的数据访问会更快一些,对运行速度有要求的可以优先考虑const。


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2024-10-21 12:17:50 | 显示全部楼层
QQ6243*** 发表于 2024-10-21 11:13
那用const定义的局部变量退出函数后会被释放吗

应该是会的,const只是声明是常量,不可修改,其实flash中也有一份相同的,运行时复制到sram
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-04-01 23:18:33

15

主题

139

回帖

977

积分

高级会员

积分
977
发表于 2024-10-21 12:45:54 来自手机 | 显示全部楼层
c251有bug,用code修饰变量需放在函数外面,做全局变量。
如果局部变量用code修饰,则运行异常,看汇编代码就知,变量地址分配在code区域,上来就是一通写入,自然是运行不下去。
如果局部变量用const,则变量分配在RAM区,进入函数时先从code区域的镜像复制数据到变量来初始化。此种情况运行结果是正确的,但是浪费data空间,浪费code空间,浪费时间。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:422
  • 最近打卡:2025-05-01 09:54:52
已绑定手机

19

主题

3190

回帖

4866

积分

论坛元老

积分
4866
发表于 2024-10-21 13:11:53 | 显示全部楼层
hea*** 发表于 2024-10-21 12:45
c251有bug,用code修饰变量需放在函数外面,做全局变量。
如果局部变量用code修饰,则运行异常,看汇编代码 ...

竟然还有这种问题,看来code做修饰要小心啊,sram够大还是const修饰好点啊
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:204
  • 最近打卡:2025-04-02 13:56:58

19

主题

37

回帖

236

积分

中级会员

积分
236
发表于 2024-10-21 13:50:12 | 显示全部楼层
const把,感觉还是8h好用
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-04-01 23:18:33

15

主题

139

回帖

977

积分

高级会员

积分
977
发表于 2024-10-21 13:59:30 来自手机 | 显示全部楼层
最优方案是code数组拖到函数外面。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 06:59 , Processed in 0.127155 second(s), 115 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表