use*_*711 2 embedded microcontroller cortex-m3 stm32 stm32l152
单击板上或 Kiel 上的重置按钮后,有没有办法保留一些 ram 值或全局变量
我正在使用 STM32L152ZE
免责声明:我是根据在其他芯片和工具链上做这种事情的经验来回答这个问题的。我不知道基尔或那个特定的部分。
取决于重置按钮的作用。
如果它直接在 MCU 上触发外部复位中断,您可能会在复位时保留所有 RAM 值,并且仅使用 C 运行时初始化将全局值清零/重新初始化。要验证这一点,请查看有关复位、RAM 和可能的待机/低功耗模式的数据表部分的详细信息。大多数现代 MCU 都为每个主题提供了完整的顶级部分。
如果它是一个完整的电源重置(因为所有为芯片供电的电压都被完全移除),那么所有的赌注都将关闭。如果是这样,我认为唯一的选择是片上 EEPROM。
您必须查看原理图和/或检查复位状态寄存器才能获得明确的答案。
因此,让我们假设它的重置确实允许您保留 RAM - 如果是这种情况,那么典型的步骤是......
将一个特殊的部分(或部分?)添加到您的链接器指令文件中,该文件不是由 C 运行时初始化程序初始化的。
使用#pragma围绕变量定义/与变量定义相关联的语句来控制它的去向(即调用该特殊部分)。
在启动时,检查复位原因代码寄存器以了解 RAM 是否包含有效数据。
假设它们是两个单独编译的程序,您需要进行类似的设置以防止引导加载程序也接触 RAM。
作为创建特殊部分的替代方法,Kiel可能会提供 C 运行时启动代码的一个版本,该版本不会隐式地将任何全局变量“归零”,而是仅使用初始值初始化全局变量。这通常可用作改善启动时间的一种方式。不过,您必须深入研究编译器手册(或仅编写自己的 C 运行时初始化代码)才能执行此操作....