为什么数组指针不能保存在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地址
uint16* const flashxx[]
试试 自己修改一下,先把数组地址转换成地址数字,保存为数值数组,这样可以保存在false中,用的时候再取出数字转换成地址
zchong 发表于 2022-3-15 19:53
uint16* const flashxx[]
试试
(引用自2楼)
好的我试试,谢谢 const uint16*flashxx
flashxx是个指向const uint16类型数据的指针数组,就是个变量,当然放ram 本帖最后由 cnxh 于 2022-3-15 20:15 编辑
不行,编译通不过
已解决
constunsigned short int* const flashxx 标准 C 里边有三种和常量相关的指针,建议 LZ 仔细研究下:
const TYPE *
TYPE * const
const TYPE * const
后两种指针自身是 const 的,才有可能被定位在 ROM 区;
实际这只是必要条件,需要编译器设定 const 可以被放在 ROM 只读区域 t3486784401 发表于 2022-3-16 00:05
标准 C 里边有三种和常量相关的指针,建议 LZ 仔细研究下:
(引用自8楼)
{:lol:}我感觉你对 C语言的熟悉程度 超过了 论坛 80%的人了 t3486784401 发表于 2022-3-16 00:05
标准 C 里边有三种和常量相关的指针,建议 LZ 仔细研究下:
(引用自8楼)
{:lol:}我感觉你对 C语言的熟悉程度 超过了 论坛 80%的人了 t3486784401 发表于 2022-3-16 00:05
标准 C 里边有三种和常量相关的指针,建议 LZ 仔细研究下:
(引用自8楼)
我感觉你对 C语言的熟悉程度 超过了 论坛 90%的人了 t3486784401 发表于 2022-3-16 00:05
标准 C 里边有三种和常量相关的指针,建议 LZ 仔细研究下:
(引用自8楼)
厉害厉害? const uint16xx10[]={
6,'字','库',
};
const uint16xx11[]={
6,'无','内','容',
};
const uint16* const flashxx[] = {
&xx10,&xx11,
}
前面一个const表明指针指向的内容是常量
后面一个const表明指针本身是常量
你没加后面那个,所以这个数组就不在FLASH里了
最后推荐一个写法:
const uint16* const flashxx[] = {
xx10, xx11,
}
ehengio 发表于 2022-3-18 17:22
const uint16xx10[]={
6,'字','库',
};
(引用自13楼)
这个解释清楚明了 谢谢各位 ehengio 发表于 2022-3-18 17:22
const uint16xx10[]={
6,'字','库',
};
(引用自13楼)
感谢分享,一下解释明白了
页:
[1]