一,存储
1,分类
下面是S32K144的存储分类
2,地址空间

地址由低到高分别是:
①P-Flash 0x0000_0000-0x0007_FFFF(512KB)
P-FLASH Program Flash,存储指令或数据,用来存放程序代码,以及初始化的全局常量
②FlexNVM 0x1000_0000-0x1000_FFFF(64KB)
非易失性闪存可以执行程序代码、存储数据或备份模拟的 EEPROM 数据。此内存位于 P-Flash 的一个独立分区中。FlexNVM总共64KB可以配置成EEPROM或者D-Flash,EEPROM+D-Flash=64KB,S32K144 的 FlexNVM 作为 EEPROM 与 D-Flash 的区别主要在于
功能:
EEPROM:用于存储需要频繁更新的小数据块,支持字节级别的擦写。
D-Flash:用于存储较大数据块,通常需要整块擦除。
用途:
EEPROM:适合存储配置参数、校准数据等需要频繁更新的数据。
D-Flash:适合存储不常更新的大数据块,如日志或备份数据。
擦写次数:
EEPROM:设计为支持更多的擦写次数。
D-Flash:擦写次数相对较少。
访问速度:
EEPROM:访问速度较慢,适合小数据量的读写。
D-Flash:访问速度较快,适合大数据量的读写。
FlexNVM 的灵活性允许它在这两种模式之间进行配置,以满足不同的存储需求
③FlexRAM 0x1400_0000-0x1400_0FFF(4KB)
可以作为RAM/EEEPROM,作为tradional RAM比真正的SRAM要慢;当配为仿真EEPROM时,写FIexRAM会产生新的EEPROM备份数据,存储在EEPROM备份E-Flash存储里;EEE slow writes模式写FIexRAM会触发EEE backup数据(E-Flash)复制到RexRAM;EEE quick writes楼式必须32bit,16-512bytes(4的倍数);S32K144 的 FlexNVM 作为 EEPROM 与 FlexRAM 作为 EEPROM 的区别主要在于存储位置和使用方式:
位置:
FlexNVM:是一种非易失性存储器,数据在掉电后仍然保留。
FlexRAM:是一种易失性存储器,掉电后数据会丢失。
使用方式:
FlexNVM 作为 EEPROM:用于持久化存储,适合存储需要在掉电后保留的数据。
FlexRAM 作为 EEPROM:通常用作 EEPROM 操作的缓存区,数据在掉电前需要写回到 FlexNVM 中以确保持久性。
性能:
FlexNVM:写入速度较慢,因为涉及到闪存的擦写操作。
FlexRAM:访问速度快,适合频繁读写操作。
数据安全性:
FlexNVM:数据安全性高,掉电后数据不丢失。
FlexRAM:需要在掉电前将数据写回 FlexNVM,以确保数据不丢失。
总结来说,FlexNVM 适合用于需要持久化的数据存储,而 FlexRAM 主要用于临时存储和加速 EEPROM 操作。
④SRAM_L 0x1FFF_8000-0x1FFF_FFFF(32KB)
⑤SRAM_U 0x2000_0000-0x200_57FF(28KB)
SRAM_L:堆(Heap) 常用于存储程序运行时的和局部变量。
SRAM_U:栈(Stack)d存储全局变量、静态数据或其他需要快速访问的数据。

3,Keil配置S32K1xx开发
①下载Pack
Keil.S32_SDK_DFP.1.3.0.pack
②配置Keil
Target 中,Use Micro Lib 需要勾选
C/C++ 中宏定义增加START_FROM_FLASH
Linker 中指定用给自定义的散列图
③标准库调用
安装完Pack后 可以将,S32K的标准库放到项目目录下,这样方便程序移植,当然可以不放,通过keil的 “Manager Run-Time Env”功能不用拷贝直接使用,建议采用第一中方式,方便程序移植
④散列图
可以通过修改散列图,动态修改堆栈大小,如下图,m_data是堆,m_data_2是栈,如果程序用的堆比较少,可以修改,如下本来栈是28K,修改后变成36K
#define m_data_start 0x1FFF8000 + __ram_vector_table_size__ #define m_data_size 0x00008000 - __ram_vector_table_size__ #define m_data_2_start 0x20000000 #define m_data_2_size 0x00007000 //修改后 define m_data_start 0x1FFF8000 + __ram_vector_table_size__ #define m_data_size 0x00006000 - __ram_vector_table_size__ #define m_data_2_start 0x1FFE000 #define m_data_2_size 0x00009000
注意散列图是给*.S文件服务的,也就是说两者版本要一致
Mr.Zhang