firefly2k 发表于 2023-9-1 15:10:46

如何指定常数数组的地址

本帖最后由 firefly2k 于 2023-9-1 15:16 编辑

我要定义一个code/const的常数数组,用于查表或者类似应用。请问如何定义?




unsigned char code text _at_ 0xe000;                  //可以编译通过
unsigned char code text={1,2,3,4,5} _at_ 0x2000;//编译报错


firefly2k 发表于 2023-9-1 15:22:21

问题已解决,_at_放中间
unsigned char const text _at_ 0x2000={1,2,3,4,5} ;

zhp 发表于 2023-9-1 15:30:05

firefly2k 发表于 2023-9-1 15:22
问题已解决,_at_放中间
unsigned char const text _at_ 0x2000={1,2,3,4,5} ;
如果需要在代码区域定义常数数组需要像下面这样定义
unsigned char const text _at_ 0xff2000={1,2,3,4,5} ;

否则即使有const关键字,也不会定义到code区

_奶咖君_ 发表于 2023-9-1 17:31:31

zhp 发表于 2023-9-1 15:30
如果需要在代码区域定义常数数组需要像下面这样定义
unsigned char const text _at_ 0xff2000={1,2,3,4 ...

那在定义变量的时候加上code 关键词行么我试过只加const 是不行的

zhp 发表于 2023-9-2 14:40:13

本帖最后由 zhp 于 2023-9-2 14:44 编辑

cofmilk 发表于 2023-9-1 17:31
那在定义变量的时候加上code 关键词行么我试过只加const 是不行的
几种定义方法以及Keil分配地址,你可参考一下
直接使用const,编译器会分配到edata区域
使用code,则只能定义在FF:0000H~FF:FFFFH区域
使用ecode,则可定义STC32G12K128的128K区域,FE:0000H~FF:FFFFH

_奶咖君_ 发表于 2023-9-2 14:51:07

zhp 发表于 2023-9-2 14:40
几种定义方法以及Keil分配地址,你可参考一下
直接使用const,编译器会分配到edata区域
使用code,则只能 ...

对对 您说的是对的 直接使用const 是不会定义在code区

飞捷 发表于 2023-11-10 08:52:20

zhp 发表于 2023-9-2 14:40
几种定义方法以及Keil分配地址,你可参考一下
直接使用const,编译器会分配到edata区域
使用code,则只能 ...

请教一下,你是如何打开KEIL 右边那test.map

gentleman 发表于 2023-11-10 11:06:29

飞捷 发表于 2023-11-10 08:52
请教一下,你是如何打开KEIL 右边那test.map

map文件 编译后会生成在 工程目录/Listings/ 下面

zhp 发表于 2023-11-10 13:00:52

飞捷 发表于 2023-11-10 08:52
请教一下,你是如何打开KEIL 右边那test.map



项目名称上点击鼠标右键,选择右键菜单中的“Open .\xxx.map”





飞捷 发表于 2023-11-11 09:13:15

zhp 发表于 2023-11-10 13:00
项目名称上点击鼠标右键,选择右键菜单中的“Open .\xxx.map”

好的,谢谢{:4_196:}
页: [1] 2
查看完整版本: 如何指定常数数组的地址