现在用的单片机STM32F4系列都是M4,STM32F4XX9系列可以外挂SDRAM,与NANDFLASH,这样的硬件框架就类似于ARM9开发板了,所以完全可以在这样一个硬件平台上设计一个类似于ARM9一样的系统框架。这里的STM32F4XX9只有1M的内部FLASH,512K的内存,如果拿他来做大型的应用远远不够,所以外挂了SDRAM与NAND。这里SDRAM有32M,NANDFLASH有128M。
可以这样设计:
内部1M的FLASH和512k内存都用于启动代码,他的功能类似于uboot,只是这个启动代码完全独立的,不会想ARM9那样下载到NANFLASH,再上电自动加载到4k空间里面,这里的启动代码和NANDFLASH里面存放的程序完全独立,他主要完成以下功能:初始化SDRAM与NANDFLASH,下载程序到NAND,把程序从NAND复制到SDRAM,跳转到SDRAM里面执行应用程序。
外部NAND存放应用程序,文件系统。
外部SDRAM存放运行的应用程序,图形缓存区,堆,栈,只是这里面的链接起始地址不是0x00000000了,而是SDRAM的物理起始地址。所以在编译应用程序的时候需要把链接起始地址设置一下。用分散加载文件设置。
这样的系统框架就跟ARM9系统很像了。
现在打算把应用框架设计为LINUX内核的模式:
freeRTOS + yaffs2 + SQLite + Lwip + cdev + shell + 输入子系统 + emWin + 其他中间件
把上面这些做个编译与链接配置文件(类似makefile),再封装成库,留出API头文件,这些API对上提供了应用所需的接口,对下提供硬件平台移植接口,这样一个山寨的“内核”就出来了。以后项目管理要升级维护就很简单,立个新项目能快速开发。缺点就是消耗了点硬件资源,但硬件资源技术上的不断进步,成本越来越低,这一块不能像以前那样的老工程师那样的思维模式,现在的项目管理与设计要把开发速度与维护成本要在首要位置。
这样的模式在一个小型的控制系统中足够用了。