Embedded 为msp430编写嵌入式应用程序?

Embedded 为msp430编写嵌入式应用程序?,embedded,rtos,msp430,Embedded,Rtos,Msp430,我想能够有一个基本的操作系统和一个高端的MSP430可能的基本文件系统。我知道我可以选择这样的东西,或者只列出一些操作系统和文件系统的选项。然而,我也希望能够在以后加载小程序或线程,理想的情况是从文件系统中获取额外的代码。我的目标是不必刷新整个设备来更改或在嵌入式设备上实现功能。我不知道该去哪里实现这一功能,或者我是否需要切换到另一个处理器,如ARM。我非常确定,每次您想要更改程序代码时,您都必须重新刷新MSP 430。当然,引导加载程序可以自行更新闪存,因此您只需要制作一个类似于引导加载程序的

我想能够有一个基本的操作系统和一个高端的MSP430可能的基本文件系统。我知道我可以选择这样的东西,或者只列出一些操作系统和文件系统的选项。然而,我也希望能够在以后加载小程序或线程,理想的情况是从文件系统中获取额外的代码。我的目标是不必刷新整个设备来更改或在嵌入式设备上实现功能。我不知道该去哪里实现这一功能,或者我是否需要切换到另一个处理器,如ARM。

我非常确定,每次您想要更改程序代码时,您都必须重新刷新MSP 430。当然,引导加载程序可以自行更新闪存,因此您只需要制作一个类似于引导加载程序的程序,但只更新程序内存中的ceratin部分,即您希望将小程序放置在的位置。然后你必须知道你的小程序代码所在的闪存区域的内存位置,这样你才能调用它

在这些小程序中运行代码也会遇到问题。如果您只想从一个内存位置运行它们,那么您可以考虑编译它们。如果您想要几个不同的小程序可以从内存中的任何“小程序空间”运行,那么您可能会遇到麻烦,因为它们不知道从哪个地址开始


当然,这些小程序中没有一个能够非常大。您的RTO将占用多少空间

MSP430是一款很棒的控制器,但是如果你想运行操作系统,并且在不烧录应用程序的情况下加载应用程序,你可能应该切换到ARM(另一个拥有许多基于ARM的微控制器的伟大平台)。

有些部分可能也值得一看。不过,它的内存仍然不多。

闪存
在msp430上,您可以擦除/重写512字节块的板载闪存(用户闪存可以处理较小的块)。
因此,您的引导加载程序/稳定RTO可以使用此“应用程序”重新编程芯片。
重定向中断有点棘手,但这可以通过从“真实”向量表到应用程序向量表的重定向跳转来完成

呼叫稳定/RTOS
也可以从应用程序中调用稳定部分的函数,您可以在稳定部分中为每个函数构建一个固定的跳转表,这样应用程序就知道如何调用该函数,即使您构建了另一个稳定/RTOS版本

RAM
如果只允许一个应用程序,这很容易。
您必须为稳定的RTO保留一些RAM,其余的RAM可供应用程序使用

但是,如果要使用多个应用程序,则要解决放置变量的问题可能很棘手。

要从应用程序中保留RAM,我更喜欢动态分配,但即使这样,您也需要一个用于动态分配块的指针,这些指针是固定的,或者您的应用程序使用堆栈上的变量。

Msp430 controller受多个操作系统支持,这些操作系统可能提供您所需的功能。其中一些提供OTA(无线编程)。有些提供(基于闪存的)文件系统。然而,这通常意味着使用闪存存储上传的程序

以下是支持msp430的两个当前活动的操作系统:

-用于“物联网”的操作系统。提供原型线程


-类似unix的操作系统,支持msp430设备的线程和OTA。

msp430上的地址空间为16位,包括所有rom和ram。并不是说你不能在这个空间内运行操作系统和应用程序,但我认为你不会找到一个拥有你想要的内存量的msp430,除非你在fpga上使用类似openmsp430的东西并调整ram和rom的数量。这个应用程序是由成本驱动的,所以我倾向于使用闪存设备。我所追求的是能够有一个稳定的固件部分和一个动态部分。我希望能够在不接触稳定部分的情况下远程刷新动态部分。如果升级失败,我不想失去稳定的部分。我希望我可以将动态部分编译为一个独立于位置的代码块,然后将钩子连接到稳定部分。只是不确定MSP430是否可以处理这个问题。Alos基于闪存的ARM可以处理这个问题吗?在这两种情况下,您都应该能够在从闪存的其他部分运行时擦除闪存的小部分(相对于整个部分)。我还没有做一个msp430引导加载程序,所以我不知道芯片上的闪存的东西,但做了一些武器,而从闪存运行闪存的其他部分。