cnxh 发表于 2022-3-15 19:33:53

为什么数组指针不能保存在flash,数值数组却可以

本帖最后由 cnxh 于 2022-3-15 19:47 编辑

const uint16xx10[]={
6,'字','库',   
};

const uint16xx11[]={
6,'无','内','容',   
};

const uint16*flashxx[] = {
&xx10,&xx11,
};

arm stm32 iar环境 如果flashxx里面存储的是数组指针,用const 关键字,仿真flashxx地址会在ram里,如果定义的是存储数值的数值数组,仿真flashxx地址在flash里,因为指针数组大了以后,ram就不够了
所以怎么样操作指针数组才可以保存到flash中,而不是存储在ram里,如果编译器是avriar,定义为__flash可以,但是armiar,这个关键字不能用

指针数组,地址是200开始的内存地址



数值数组,地址是800开始的flash地址




zchong 发表于 2022-3-15 19:53:07

uint16* const flashxx[]
试试

cnxh 发表于 2022-3-15 19:59:13

自己修改一下,先把数组地址转换成地址数字,保存为数值数组,这样可以保存在false中,用的时候再取出数字转换成地址

cnxh 发表于 2022-3-15 19:59:58

zchong 发表于 2022-3-15 19:53
uint16* const flashxx[]
试试
(引用自2楼)

好的我试试,谢谢

shiva_shiva 发表于 2022-3-15 20:03:54

const uint16*flashxx

flashxx是个指向const uint16类型数据的指针数组,就是个变量,当然放ram

cnxh 发表于 2022-3-15 20:05:00

本帖最后由 cnxh 于 2022-3-15 20:15 编辑

不行,编译通不过


已解决

xuekcd 发表于 2022-3-15 20:07:06

constunsigned short int* const flashxx

t3486784401 发表于 2022-3-16 00:05:19

标准 C 里边有三种和常量相关的指针,建议 LZ 仔细研究下:

const TYPE *
TYPE * const
const TYPE * const

后两种指针自身是 const 的,才有可能被定位在 ROM 区;
实际这只是必要条件,需要编译器设定 const 可以被放在 ROM 只读区域

ackyee 发表于 2022-3-16 00:07:13

t3486784401 发表于 2022-3-16 00:05
标准 C 里边有三种和常量相关的指针,建议 LZ 仔细研究下:


(引用自8楼)

{:lol:}我感觉你对 C语言的熟悉程度 超过了 论坛 80%的人了

ackyee 发表于 2022-3-16 00:09:59

t3486784401 发表于 2022-3-16 00:05
标准 C 里边有三种和常量相关的指针,建议 LZ 仔细研究下:


(引用自8楼)

{:lol:}我感觉你对 C语言的熟悉程度 超过了 论坛 80%的人了

tang_qianfeng 发表于 2022-3-16 07:17:23

t3486784401 发表于 2022-3-16 00:05
标准 C 里边有三种和常量相关的指针,建议 LZ 仔细研究下:



(引用自8楼)

我感觉你对 C语言的熟悉程度 超过了 论坛 90%的人了

NM2012 发表于 2022-3-16 08:12:36

t3486784401 发表于 2022-3-16 00:05
标准 C 里边有三种和常量相关的指针,建议 LZ 仔细研究下:



(引用自8楼)

厉害厉害?

ehengio 发表于 2022-3-18 17:22:13

const uint16xx10[]={
6,'字','库',   
};

const uint16xx11[]={
6,'无','内','容',   
};

const uint16* const flashxx[] = {
&xx10,&xx11,
}

前面一个const表明指针指向的内容是常量
后面一个const表明指针本身是常量
你没加后面那个,所以这个数组就不在FLASH里了

最后推荐一个写法:
const uint16* const flashxx[] = {
xx10, xx11,
}

yunqing_abc 发表于 2022-3-18 17:26:14

ehengio 发表于 2022-3-18 17:22
const uint16xx10[]={
6,'字','库',   
};
(引用自13楼)

这个解释清楚明了

cnxh 发表于 2022-3-18 20:25:36

谢谢各位

了无 发表于 2022-3-18 22:56:46

ehengio 发表于 2022-3-18 17:22
const uint16xx10[]={
6,'字','库',   
};

(引用自13楼)

感谢分享,一下解释明白了
页: [1]
查看完整版本: 为什么数组指针不能保存在flash,数值数组却可以