首页 > 其他分享 >关于CH32系列MCU设置noinit变量

关于CH32系列MCU设置noinit变量

时间:2023-10-24 13:23:30浏览次数:48  
标签:__ noinit CH32 RAM uint32 MCU 下图 变量

关于noinit定义:noinit段指的是芯片SRAM的一块内存区域(注意是RAM区而非Flash),在该段定义的变量、或者函数,在除了掉电之外的任何芯片复位的情况下都不会被重新初始化。

关于noinit作用:no_init段常用来保存一些敏感信息,特殊应用场合下的不能被复位的数据或者做复位判断标志等数据。这个功能可以配合flash存储,在短期内以noinit RAM保持数据,在关键节点再将数据写进flash,以达到减少flash擦写次数的操作次数。

1、关于CH32V系列MCU设置noinit变量,具有以下3种方法:

方法1:按照下图配置,使用__attribute__((section(".noinit")))定义变量,但需要注意,noinit变量放在RAM中,不能初始化,变量开始值是一个随机值。

 

方法2:参考下图,需要配置ld文件,ld文件修改如下:

ld文件:
.noinit :
{
     . = ALIGN(4);
     KEEP(*(*.inot*))
}>NOINIT 

main文件:
volatile uint32_t test __attribute__((section(".inot"))) ;

 

方法3:参考下图,需先定义一个结构体,然后位置放在RAM区域内,对结构体变量进行运算。

typedef struct
{
  __IO uint32_t a;
  __IO uint32_t b;
  __IO uint32_t n;
} test;
#define T_V                ((test *) 0X20003000)

 

2、关于CH32F系列MCU设置noinit变量(2种方法)

第一步:按照下图勾选No Init

第二步:按照下图方法1或者方法2配置

方法1:

#define __noinit__ __attribute__((zero_init))   // 变量不初始化为0
__noinit__  int  tmp;                     // 变量前加上宏__noinit__ 

 

方法2:

__attribute__((zero_init))    int  tmp; 

 

 

标签:__,noinit,CH32,RAM,uint32,MCU,下图,变量
From: https://www.cnblogs.com/liaigu/p/17784475.html

相关文章

  • CH32X035 模拟IIC驱动EEPROM
    在CH32X035的GPIO模式配置选项中,并没有开漏输出的配置模式,如下图。在使用GPIO模拟IIC时,可在初始化时将其配置成推挽输出模式,在需要时切换对应的输入输出模式,以下是CH32X035GPIO模拟IIC的实现例程。 具体程序代码如下:iic.h文件:#ifndef__IIC_H#define__IIC_H#include"c......
  • CH32X035 模拟IIC驱动EEPROM
    来源:https://www.cnblogs.com/liaigu/p/17784027.html在CH32X035的GPIO模式配置选项中,并没有开漏输出的配置模式,如下图。在使用GPIO模拟IIC时,可在初始化时将其配置成推挽输出模式,在需要时切换对应的输入输出模式,以下是CH32X035GPIO模拟IIC的实现例程。 具体程序代码如下:iic.......
  • 【WCH蓝牙系列芯片】-基于CH32V208开发板—动态修改蓝牙从机MAC地址
    -------------------------------------------------------------------------------------------------------------------------------------   ......
  • 嵌入式(MCU)STM32L496QEI6/STM32L496QGI3基于ARM®Cortex®-M4内核
    一、简介STM32L432位MCU+FPU是超低功耗微控制器,基于高性能的ARM®Cortex®-M432位RISC内核,工作频率高达80MHz。Cortex-M4内核具有单浮点单元(SFPU)精度,支持所有ARM单精度数据处理指令与数据类型。同时执行全套DSP指令和存储保护单元(MPU),增强应用安全性。明佳达供求嵌入式(MC......
  • CH32F系列MCU代码在SRAM中运行配置方法
    第一种:使用Keil仿真的方式。因SRAM启动与FLASH无关,在SRAM中运行,断电后数据丢失,故在keil下仅用于仿真。有四个注意事项:1)、BOOT0、BOOT1都需要接高电平,从RAM启动;2)、在Debug选项中,InitializationFile选项加载SRAM.INI文件;3)、FLashDownload界面中算法文件起始地址修改成RAM的起始......
  • RX66T优化用于电机控制R5F566TFFGFP、R5F566TKGGFP、R5F566TKCGFP搭载第三代RXv3 CPU
    1、RX66T 框图2、描述RX66T32位MCU是基于第三代RXv3CPU内核的旗舰32位RXMCU系列中的首款产品。这些MCU优化用于电机控制,可满足实时性能和增强稳定性要求。这些特性帮助实现下一代智能工厂设备和智能家电中的逆变器控制。这些MCU还具有下一代设计中嵌入式AI所需的额外处理能......
  • 基于CH32V208开发板—FLASH读写、擦除
    -------------------------------------------------------------------------------------------------------------------------------------在CH32V208系列芯片中,各个型号的参数如下图:FLASH的大小包含零等待区和非零等待区,一共是480K。1、内部实际存储代码的flash为慢速flas......
  • 关于CH32V系列MCU中断优先级配置以及硬件压栈
    从下图可以看出,第二列与第三列分别为优先级与优先级类型,优先级类型又分为两种,其一是固定优先级,其二是可编程的优先级。以RTC为例,优先级为5,优先级类型为可编程,代表着在不配置RTC的优先级时默认为5,如果需要,也可以将其配置为更高的优先级进行响应。下图关于中断优先级配置,针对CH32V......
  • 关于CH32V系列MCU 免表中断(VTF)的使用配置方法
    可编程快速中断控制器(PFIC)提供四个免表(VectorTableFree)中断通道,可不经过中断向量表的查表过程,直达中断函数入口。个人简单测试过,当开启VTF后,中断延迟时间大概可缩短2个时钟周期左右。关于VTF的具体介绍,可参考对应青稞微处理器手册3.5小节。QingKeV3手册:https://www.wch.cn/do......
  • 关于CH32V307 PA6、7引脚复用为串口1和串口7配置方法
    1、复用为串口1配置方法关于PA6和PA7,重映射串口1时,最后下标为3,如下图。换算成二进制为11,重映射对应的就是PA6、PA7,如下图。由于库中没有直接定义该位,因此将PA6、PA7复用为USART1时,需要进行如下操作,如下图。可直接调用GPIO_PinRemapConfig函数,先调用该函数复用为USART1高位,再......