我的想法是,我们稍加改动,使得在启动app之前先询问是否启动,确认即将系统任务状态进行记录,保存到flash中,完成之后载入app。然后在app启动之后我们通过复位按键重新进入系统,预先在主程序中写入加载flash记录,回到上一次任务中断的地方。
我觉得这么做是完全可以的,但是这样做还是有局限。倒不如将系统做的更完善一点。像手机一样,可以开发app同时也可以实现多任务共同运行。这样就可以将app与系统独立出来,
以后的开发也就更专业了。现在的单片机性能越来越好,我觉得肯定能实现。
这个问题推出后不能继续执行程序的原因,我认为是用这样的方法,mcu的中断向量表已经被改成所谓app程序的了,而当初的所谓系统的中断向量表偏移地址已经丢了,而且也没有设置机制让程序重新跳转回所谓的系统程序。
我的想法是,改掉app的中断向量表偏移地址,当执行app程序是,跳转到app程序开始的地方执行,但app程序中需要加入一个利用按键终端触发的无条件跳转到系统程序开始执行位置的语句,这样就能在系统程序和app程序之间来回切换而不必重新启动系统
感觉不太容易实现,如果要调用bin文件来执行,肯定是要把bin文件写入到STM32的内部FLASH空间的,但STM32内部FLASH的空间最大的也才2MB左右吧,而且需要十分严格的内存管理机制,毕竟STM32是不支持MMU的,而且楼主的思想感觉是有个操作系统的概念在里面,由操作系统来对bin文件进行调度,而且这个bin文件是可以结束的,如果是根据IAP的思想的话感觉无法做到无缝链接,期待高人解答吧
不是很了解,做活动 。
主要主程序具备IAP功能,能将访问到的BIN文件烧写到SRAM并运行(PC指针运行到该区域);
Bin文件代码在运行完毕后,PC能恢复到主代码的PC栈中的代码继续执行主代码的程序;恢复主程序中断偏移量;
本帖最后由 yang_alex 于 2017-12-21 23:06 编辑
这个应该是没问题的啊。现成的有elua和micropython。只要是解释型的语言或者脚本语言都可以吧。elua可以看看:
http://www.eluaproject.net/
micropython可以看看:(已经移植到好几种Nucleo评估板上了)
http://micropython.org/
个人觉得想法是好的,可以尝试,但是恐怕编程能力需要很强
啥也不说了,你说的这功能不就是 micropython 能干的活嘛,哈哈。
或者组态软件,做成类似链表的形式,每个小子程序都存在ROM中,但是总体有一张表,可以随时通过加载链表序号的形式运行程序。
可以实现;每个任务bin文件单独编译(指定地址);存储到SPI Flash中,运行时直接拷贝到相应的地址上,底层硬件接口可以采用接口列表的形式实现底层接口的共享调用;