在爱好者友好型微控制器中从RAM执行指令


12

我的一个项目将从能够运行不存储在微控制器中(而是存储在SD卡中)的程序中受益匪浅。

因此,我正在寻找一种设备,该设备将允许我将SD卡中的代码加载到RAM中,然后从RAM中执行代码。目前,我只有PicKit2附带的程序员,所以我宁愿选择使用PIC。

有谁知道哪个PIC可以做到这一点?如果没有PIC能够做到这一点,那么有哪些不同的微控制器可用于此工作?最好以面包板兼容包装提供。


2
是吗?...您需要从ram执行什么操作?您所说的“静态”是什么意思?您实际上不是在尝试编写自修改代码吗?您是在谈论缺乏动态内存分配吗?aka没有malloc?
标记

2
@Mark我希望能够从外部设备(例如SD卡)加载程序并执行它。我会在文章中尝试更好地解释。
Ponkadoodle

2
值得一提的是,我所知道的唯一允许使用的PIC是PIC32。除非您做一些疯狂的事情,例如将其从SD卡复制到闪存,否则如果您经常切换程序,将会很快吞噬闪存。大多数小型8 / 16bit uC在数据(ram)和程序(flash)空间之间进行了严格的分段,并且不允许程序计数器寻址ram(哈佛体系结构,无内存保护等)。
标记

Answers:


5

有一些PIC允许您添加外部程序存储器。我从没有做过,但是应用笔记AN869AN778提供了有关如何实现外部存储器的更多信息。



6

如前所述,PIC(PIC32除外)无法做到这一点。由于大多数微控制器的RAM资源非常有限,您可能必须使用任何系列的较大处理器或具有外部存储器总线的处理器。

MSP430处理器可以从其RAM空间运行代码,但是您将需要具有16k RAM空间的F5438之类的东西-真正不能选择以128字节运行代码!

如果处理器具有外部总线,则可以将RAM放入代码空间。如果处理器体系结构不允许将数据写入执行内存,则可能必须添加一些额外的逻辑以将RAM映射到两个内存区域。

我已经在基于8051的系统中从RAM运行了代码,但这意味着必须将RAM映射到EXTERN内存空间中进行编程,然后再返回到CODE空间中才能执行。加载程序/监视程序处理了存储库的切换和加载。请不要索要代码-我大约30年前就这样做了,而且很早就丢失了(用PL / M-51编写)


5

由于内存架构的原因,低档和中档PIC都无法从RAM执行。

任何基于ARM的CPU都应从RAM执行。尽管它们倾向于采用smd封装,但是已经有很多“ DIP”大小的模块已经装载了微控制器。例如,看看mbedLPCXpresso。它们都带有引导加载程序,或者在LPCXpresso的情况下,带有调试接口以及免费的编译器。

如果您希望使用简单的8位微控制器,则可以考虑飞思卡尔HCS08系列产品。这些可以从RAM中执行,并且有免费的codewarrior IDE和C编译器的代码受限版本。

我相当确定MPS430也应该能够执行此操作,但是我自己从未这样做过。


mbed实际上通过将二进制文件复制到内置闪存驱动器上然后进行重置来接收二进制文件。当连接到计算机的USB端口时,它将显示为闪存驱动器。如果您可以找到一种方法来使用闪存驱动器而不是SD卡,或者进行设置,以便将SD卡中的二进制文件自动复制到闪存驱动器并执行重置操作,那么您可能很幸运。mbed不需要硬件程序员。
阿莫斯(Amos)2010年


3

我记得读过一篇关于AVR的引导程序的信息,该引导程序将通过SD卡中的.hex文件(大概是)重新刷新芯片。我找不到原始来源,但是此Google搜索显示了一些有趣的点击。是的,我知道这是AVR,而不是PIC,但是如果PIC不能解决问题,您可能会发现它很有用。



3

正如其他张贴者所指出的那样,您不能从8位或16位PIC的RAM中执行代码,因为它们使用的是哈佛体系结构(单独的代码和数据空间)。从SD卡加载程序并将其闪存到代码存储器是否可行取决于您执行此操作的频率。

如果您要创建动态环境,例如不断覆盖程序的OS,则不会。但就我而言,我有一个程序可以根据需要从2 GB SD卡中加载驱动程序。PIC24FJ256GB110的最小擦除/写入周期为10,000。即使每天进行五次,该闪光灯也将持续至少5 1/2年。

(请注意:最低数量为10,000个数字。典型的擦除/写入周期耐久性可能是其五倍-因此,如果您在进行开发,则可能每天可以刷新闪存140次-每3 1/2分钟持续八个小时-可能还会持续一年。)


2

在我的学校,我们使用带有外部RAM的HC11或HC12处理器在...上加载和执行程序...但是我忘记了板卡/套件的名称: ,因此您可以将代码加载到RAM中并执行它。

以队列的blalor,最好的解决办法可能是只需添加您的主板一个按钮,可以从存储您使用引导程序插入SD卡上的数据重新刷新PIC。我无法想象更大的PIC上不适合使用哪种代码?如果您有一些静态数据(图形,文本,声音),请将其保留在外部存储中。


1

您可能无法从RAM进行分配,但是对于您的应用程序,您可以在闪存中有一个小型加载器,然后可以将SD卡数据读入闪存的其余部分。我将这种方法与SPI控制的闪存芯片结合使用,以允许从无线链路加载固件,然后在完全收到固件后安装固件。我不认为没有什么特别的原因,尽管与SD兼容的引导程序可能会占用一些空间,但它不适用于SD卡。


我对固件和用途稍有不同的设备执行了类似的操作:将所有文件写入外部SPI闪存(其大小比大多数微控制器大得多),并使用其中一张映像重新刷新控制器。如果在重置过程中按下了按钮,则使用引导加载程序。
凯文·维米尔

0

相当多的微控制器将允许您执行此操作,听起来像不是图片。您想要做的是拥有一个使用spi从sd卡读取的引导加载程序,复制该程序,该程序可能想成为一个已知或硬编码的文件名,可能在根目录中,将该文件解析为ram,然后跳转到ram中的程序。基于ARM的控制器肯定会让您执行以下操作。

一种替代方法是让引导加载程序通过spi读取sd卡,而不是复制到ram并将分支烧录到闪存的​​一部分。如果在开机或重置时按下按钮,则可能需要一个按钮,然后从SD卡中加载新程序;否则,如果签名或校验和在Flash的该可加载部分上看起来不错,然后在引导分支上到达该部分。或者,如果存在sd卡,则从其中加载,否则分支到闪存的可加载部分。可以将这种方法与基于arm和基于avr的应用程序结合使用,甚至可能基于图片,但是我的图片体验过时了。msp430我也会假设。基本上,如果您可以从微控制器处理器本身对执行的闪存部分进行重新编程,


嗯,实际上我还没有从avr编程avr,抱歉,这是从主机串行进行的。提出第三个解决方案,您会看到很多便宜的业余爱好板...使用两个微控制器。在这种情况下,一个将保持另一个处于复位状态,读取sd卡,通过串行或其他方式对另一个微控制器进行编程,然后在另一个微控制器上释放复位。爱好/评估板通常具有一个用于USB接口的微型接口,通常与另一个接口相连。
old_timer 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.