战舰V3系列05:添加外部SRAM
本系列以 oneos2.3.0 提供的 STM32F103ZE 模板为基础,将 oneos 在战舰 V3 上运行起来,并逐步适配相关外设,计划周更
本系列相关代码将上传 gitee 供测试体验,仓库: https://gitee.com/dreamfly233/OneOS/tree/projects_OneOS-v2.3.0/
这是本系列的第5期,添加外部sram驱动,并添加到oneos的内存管理中
参考文档:
一个说明:
由于gitee库容量限制,后续将仅保留最新版例程,参考https://gitee.com/dreamfly233/OneOS/tree/projects_OneOS-v2.3.0/projects/stm32f103zet6-atk-warship_v3-latest
准备项:
复制上个教程的stm32f103zet6-atk-warship_v3-sdcard-spiflash文件夹,并重命名为stm32f103zet6-atk-warship_v3-sram
cubemx配置:
下面是战舰V3 外部sram的原理图:
挂载在fsmc上,型号IS62WV51216,大小为1Mbytes
打开projects\stm32f103zet6-atk-warship_v3-sram\board\CubeMX_Config 下 的 cubemx 工程文件(CubeMX_Config.ioc),参照下图进行配置,时序参数参考正点原子例程
完成以上配置后点击GENERATE CODE生成代码
menuconfig配置及生成工程
在stm32f103zet6-atk-warship_v3-sram文件夹打开oneos-cube,内存管理算法在menuconfig中定位到Kernel→ Memory management调整,这里保持默认配置即可
使用scons --ide=mdk5生成mdk工程,然后打开project.uvprojx工程
添加了fsmc设备如sram后,drv_sram.c/sram_test函数将参与编译,此时编译可能报错SRAM_SIZE未定义,在board.h添加相关宏即可
此时编译可以通过,编写并添加drv_atk_sram.c到工程:
os_sys_heap_add即将外置sram加入到系统内存管理中,调用os_malloc/os_calloc即可从外置sram分配内存
mem_test_func调用os_calloc分配内存,并进行内存写入和读取校验
注意:加入系统内存堆后,调用sram_test函数将破坏sram的内存控制块,再次调用内存管理接口将导致hardfault
因此调用add_sram后禁止调用sram_test
提示:外部sram速度一般,且在战舰开发板上与lcd、网卡复用fsmc接口,不适合作为lcd的framebuffer使用