首页 > 其他分享 >[keil] 将函数定义到RAM运行,和定义无初始化变量(软复位,变量不清空)

[keil] 将函数定义到RAM运行,和定义无初始化变量(软复位,变量不清空)

时间:2023-02-25 11:05:48浏览次数:40  
标签:__ RW 变量 keil 复位 FTMRE FSTAT 定义


keil链接文件

  • ​​一、将函数定义到RAM运行​​
  • ​​二、定义无初始化变量(软复位,变量不清空)​​

先打开Keil工程配置,选择linker链接文件,取消自动生成,并编辑sct。

[keil] 将函数定义到RAM运行,和定义无初始化变量(软复位,变量不清空)_函数定义


[keil] 将函数定义到RAM运行,和定义无初始化变量(软复位,变量不清空)_初始化_02


如上图,定义一个RAMFUNC区域,如果需要无初始化变量,则定义红框内容。

LR_IROM1 0x00000000 0x00017000  {    ; load region size_region
ER_IROM1 0x00000000 0x00017000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
.ANY (+XO)
}
RW_IRAM1 0x1FFFF000 0x00003F00 { ; RW data
.ANY (+RW +ZI)
*.o (.ramfunc)
}
RW_IRAM2 0x20002F00 UNINIT 0x00000100 {
.ANY (.uninit)
}
}
  1. 示例芯片的RAM为0x4000 byte,这里拆分为两组,第一组[RW_IRAM1]复位清零,第二组[RW_IRAM1]复位保持。
  2. LR_IROM1定义Flash大小区域。如果是APP工程,则填写APP区域大小。

复位保持:仅非掉电复位有效,硬件复位还是无法保持。一般用于跳转boot传递信息,或者存储单次运行数据。

一、将函数定义到RAM运行

/******************************************************************
* 函数名称:McuFlashDoCommand
* 出口参数:0 指令操作失败,1 指令操作成功
* 函数说明:启动FLASH指令 __attribute__((used, section("atcmd")))
******************************************************************/
uint8_t __attribute__((used, section(".ramfunc"))) McuFlashDoCommand(void) {
uint8_t ret = 1;

/* Clear CCIF to launch command */
FTMRE->FSTAT = FTMRE_FSTAT_CCIF_MASK;

while (!(FTMRE->FSTAT & FTMRE_FSTAT_CCIF_MASK));
while ((FTMRE->FSTAT & FTMRE_FSTAT_MGBUSY_MASK));
/* Check if an error is occurred */
if (FTMRE->FSTAT & (FTMRE_FSTAT_FPVIOL_MASK | FTMRE_FSTAT_ACCERR_MASK))
ret = 0;

return ret;
}

二、定义无初始化变量(软复位,变量不清空)

注:uninit只有256byte(根据上述链接文件定义),如果定义的大小超出范围,整个uninit地址都会移动到普通RAM区域

boot_info_t g_boot_info __attribute__((used, section(".uninit")));

[keil] 将函数定义到RAM运行,和定义无初始化变量(软复位,变量不清空)_函数定义_03


标签:__,RW,变量,keil,复位,FTMRE,FSTAT,定义
From: https://blog.51cto.com/xuejianqiang/6084944

相关文章