我希望能够拥有一个用于高端 MSP430 的基本操作系统和基本文件系统,可能是MSP430F5438。我知道我可以使用诸如FreeRTOS、IAR PowerPac或Micrium之类的东西来命名操作系统和文件系统的一些选项。但是,我希望以后也能够加载小小程序或线程,理想情况下从文件系统中获取这些额外的代码。我的目标是不必重新刷新整个设备来更改或实现嵌入式设备上的功能。不知道去哪里实现这个功能,或者我是否需要切换到另一个处理器,比如 ARM。
5 回答
MSP430 是一款出色的控制器,但如果您想运行操作系统并加载应用程序而不将它们刻录到闪存,您可能应该切换到 ARM(另一个具有许多基于 ARM 的微控制器的出色平台)。
我很确定您每次想要更改程序代码时都必须重新刷新 MSP 430。当然,引导加载程序可以自行更新闪存,因此您只需要制作一个类似于引导加载程序的程序,但只更新程序存储器的某些部分 - 即您希望放置小程序的位置。然后您必须知道您的小程序代码所在的闪存的每个区域的内存位置,以便您可以调用它。
在这些小程序中运行代码时,您也会遇到问题。如果您只想从一个内存位置运行它们,那么您可以考虑到这一点来编译它们。如果您想要几个可以从内存中的任何“小程序空间”运行的不同小程序,那么您可能会遇到麻烦,因为它们不知道它们从哪个地址开始。
当然,这些小程序都不会很大。您的 RTOS 将占用多少空间?
闪存
在 msp430 上,您可以以 512 字节的块擦除/重写板载闪存(用户闪存可以处理更小的块)。
因此,您的引导加载程序/稳定版 RTOS 可以使用此“应用程序”对芯片进行重新编程。
重定向中断有点棘手,但这可以通过从“真实”向量表到应用程序向量表的重定向跳转来完成。
调用 stable/RTOS
也可以从应用程序调用 stable 部分的函数,您可以在 stable 部分中为每个函数构建一个固定的跳转表,因此应用程序知道如何调用该函数,即使您构建另一个 stable/实时操作系统版本。
RAM
如果您只允许一个应用程序,这很容易。
您必须为稳定的 RTOS 保留一些 RAM,其余的 RAM 可由应用程序使用。
但是,如果您想使用多个应用程序,解决放置变量的问题可能会很棘手。
要从应用程序中保留 RAM,我更喜欢动态分配,但即便如此,您也需要一个用于动态分配块的指针,并且这些指针是基于固定的,或者您的应用程序使用堆栈上的变量。
有一些FRAM msp430部件可能也值得一看。不过,它仍然不是很多内存。