头像-365306

32438cbf52c0fb41

个人成就

获得 0 次赞

帮助过0人

stm32能否做到内核与应用程序分离(用动态链接库?

希望在stm32上实现系统与应用程序分离的机制(虽然没有MMU)stm32有个从sd卡运行python的项目,没试过,或许与我下面的设想2相符 我们通常所做的单片机系统都是整个系统只运行一个程序,我希望能实现系统Kernel部分可以根据需要从SD卡启动应用程序,最好是能运行多个应用程序,并且最初的Kernel部分不会被覆盖。 我设想的方法:1、bootloader与app分离我以前做过stm32 bootloader升级系统,姑且把上面的应用程序分为两部分:- 20K bootloader 存放于0x00000000,中断向量表0x00000000- 余下 app(实际系统) 存放于0x00000000+20K,中断向量表0x08000000 当bootloader启动app部分后,bootloader的中断向量部分被新的覆盖,似乎投胎一样,system感知不到bootloader,两个部分都有USART驱动,都重复编写printf,很麻烦。app部分需要维护中断、应用程序、维护中断向量表。 2、借助动态链接库采用ucos、rt-thread等RTOS的任务方式我以前写过静态链接库供keil在其他项目里编译,动态链接库没做过。设想如下:首先编译Kernel部分,包含系统所有的驱动、中断、内存管理,然后将API导出(这个我不会),导出的内容如同linux源码里的System.map文件一样,Kernel的加载地址是0x00000000```c0020d4c t atkbd_initc0020d74 t gpio_keys_initc0020d90 T bl_key_initc0020e68 t psmouse_initc0020efc T synaptics_module_initc0020f1c t mxs_ts_init```编译app,加载地址是0x08000000,它只管理应用功能,对于硬件控制从系统的API获取。app作为rtos的线程运行。3、多app运行或许实现不了,stm32没有mmu,app的加载地址是0x08000000,若启动第二个app,如何能避免不于第一个app冲突