国产cortex-m3核TS3F605芯片设置内存NoInit操作
·
1. no_init段的作用
noinit段指的是芯片SRAM的一块内存区域(注意是RAM区而非Flash),在该段定义的变量、或者函数,在除了掉电之外的任何芯片复位(如Reset复位、软件复位、看门狗复位)的情况下都不会被重新初始化,这个段可以用来保存一下用户信息。
2.no_init段实现方法
首先在keil mdk的Options->Target设置地址IARAM2地址为0x20010000,NoInit打勾后系统在启动时不会初始化这个区域的值。

在代码将NoInitVal的编译地址指定为NoInit区域。
uint8_t NoInitVal __attribute__((section(".bss.ARM.__at_0x20010000"))); //定义NoInitVal的编译地址
/*
//.s后跳转入口函数
*/
int main()
{
//①clock
SetSysClock();//设置系统时钟
delay_init();//初始化delay延时函数
NoInitVal++;//未初始化值累加
//②uart
UART0_Config(115200);//配置波特率115200
UART0_Start();//启动串口
UART0_PollSendBytes((uint8_t*)("hello world\r\n"), 13);//打印hell world测试UART
sprintf(uart_sndBuf, "%04d\r\n", NoInitVal);
UART0_PollSendBytes(uart_sndBuf, 6);//打印hell world测试UART
delay_ms(2000);
NVIC_SystemReset();
//进入主循环
while(1)
{
}
3.测试效果
运行代码后,经过软件复位后 NoInitVal的值累加,“21,22,23…… 28,29”打印,未被初始化。

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)