STM32中,联合体是否可以作为常量定义到FLASH中?

2019-12-20 21:32发布

CPU:STM32F103VC
一些改动很少的设置参数,想保存到FLASH里,原来的做法是先定义一个结构体,然后定一个数组和结构体的联合体,如下:
        typedef        struct
        {
                uchar v_SlvCfg[8];
                uchar v_SciAdr;
                uchar v_SciBote;
        }CONFIG_PARA;

        typedef union
        {
                uchar        v_Buf[10];
                CONFIG_PARA s_BasCtt;
        }DEVICE_CONFIG;

        DEVICE_CONFIG        s_BasCfg;

然后初始化时从 FLASH 里读到 .s_BasCfg.v_Buf 里,相当于从 FLASH 里读到RAM里,,,现在我想直接把这个联合体定义到 FLASH 里,然后程序里直接用,不用每次还从 FLASH 里搬到 RAM 里,应该怎么定义?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
jiaowoxiaolu
1楼-- · 2019-12-20 23:28
本帖最后由 jiaowoxiaolu 于 2018-4-10 17:57 编辑

        typedef        struct
        {
                uchar v_SlvCfg[8];
                uchar v_SciAdr;
                uchar v_SciBote;
        }CONFIG_PARA;

const CONFIG_PARA para ={{1,1,1,1,1,1,1,1,},2,3};


const关键字表示编译到flash 使用时候直接 para.v_SlvCfg[0]就行了,不需要读什么ram
saccapanna
2楼-- · 2019-12-21 03:42
本帖最后由 saccapanna 于 2018-4-10 17:56 编辑

结构体初始化不行,如果是数组可以。把你的结构转成数组数据,然后 __root 定义到Flash.

  __root struct Person p1 = {"zhangsan",20,170};

试试这样行不行。
saccapanna
3楼-- · 2019-12-21 08:34
jiaowoxiaolu 发表于 2018-4-10 17:50
typedef        struct
        {
                uchar v_SlvCfg[8];

const 有时仍然会定义到RAM中,IAR是用 __root
jiaowoxiaolu
4楼-- · 2019-12-21 10:58
 精彩回答 2  元偷偷看……
jiaowoxiaolu
5楼-- · 2019-12-21 16:12
saccapanna 发表于 2018-4-10 17:57
const 有时仍然会定义到RAM中,IAR是用 __root

我另外用IAR也试了一下,const也是编译到flash  IAR6.6版本
saccapanna
6楼-- · 2019-12-21 17:24
jiaowoxiaolu 发表于 2018-4-10 18:01
我另外用IAR也试了一下,const也是编译到flash  IAR6.6版本

我说的是有时,也就是不确定。Keil没用过,要查查编译器手册。

一周热门 更多>