我的一个项目将从能够运行不存储在微控制器中(而是存储在SD卡中)的程序中受益匪浅。
因此,我正在寻找一种设备,该设备将允许我将SD卡中的代码加载到RAM中,然后从RAM中执行代码。目前,我只有PicKit2附带的程序员,所以我宁愿选择使用PIC。
有谁知道哪个PIC可以做到这一点?如果没有PIC能够做到这一点,那么有哪些不同的微控制器可用于此工作?最好以面包板兼容包装提供。
我的一个项目将从能够运行不存储在微控制器中(而是存储在SD卡中)的程序中受益匪浅。
因此,我正在寻找一种设备,该设备将允许我将SD卡中的代码加载到RAM中,然后从RAM中执行代码。目前,我只有PicKit2附带的程序员,所以我宁愿选择使用PIC。
有谁知道哪个PIC可以做到这一点?如果没有PIC能够做到这一点,那么有哪些不同的微控制器可用于此工作?最好以面包板兼容包装提供。
Answers:
要考虑的另一种选择是对存储在SD卡上的程序使用解释语言。这样,处理器就不会执行从卡中读取的机器代码,而只是将其视为数据。
这种方法以速度为代价,为您提供了灵活性。
有很多选项可供选择: 面向微控制器的高级语言解释器/编译器调查
如前所述,PIC(PIC32除外)无法做到这一点。由于大多数微控制器的RAM资源非常有限,您可能必须使用任何系列的较大处理器或具有外部存储器总线的处理器。
MSP430处理器可以从其RAM空间运行代码,但是您将需要具有16k RAM空间的F5438之类的东西-真正不能选择以128字节运行代码!
如果处理器具有外部总线,则可以将RAM放入代码空间。如果处理器体系结构不允许将数据写入执行内存,则可能必须添加一些额外的逻辑以将RAM映射到两个内存区域。
我已经在基于8051的系统中从RAM运行了代码,但这意味着必须将RAM映射到EXTERN内存空间中进行编程,然后再返回到CODE空间中才能执行。加载程序/监视程序处理了存储库的切换和加载。请不要索要代码-我大约30年前就这样做了,而且很早就丢失了(用PL / M-51编写)
由于内存架构的原因,低档和中档PIC都无法从RAM执行。
任何基于ARM的CPU都应从RAM执行。尽管它们倾向于采用smd封装,但是已经有很多“ DIP”大小的模块已经装载了微控制器。例如,看看mbed或LPCXpresso。它们都带有引导加载程序,或者在LPCXpresso的情况下,带有调试接口以及免费的编译器。
如果您希望使用简单的8位微控制器,则可以考虑飞思卡尔HCS08系列产品。这些可以从RAM中执行,并且有免费的codewarrior IDE和C编译器的代码受限版本。
我相当确定MPS430也应该能够执行此操作,但是我自己从未这样做过。
Propeller从外部存储加载程序。
正如其他张贴者所指出的那样,您不能从8位或16位PIC的RAM中执行代码,因为它们使用的是哈佛体系结构(单独的代码和数据空间)。从SD卡加载程序并将其闪存到代码存储器是否可行取决于您执行此操作的频率。
如果您要创建动态环境,例如不断覆盖程序的OS,则不会。但就我而言,我有一个程序可以根据需要从2 GB SD卡中加载驱动程序。PIC24FJ256GB110的最小擦除/写入周期为10,000。即使每天进行五次,该闪光灯也将持续至少5 1/2年。
(请注意:最低数量为10,000个数字。典型的擦除/写入周期耐久性可能是其五倍-因此,如果您在进行开发,则可能每天可以刷新闪存140次-每3 1/2分钟持续八个小时-可能还会持续一年。)
相当多的微控制器将允许您执行此操作,听起来像不是图片。您想要做的是拥有一个使用spi从sd卡读取的引导加载程序,复制该程序,该程序可能想成为一个已知或硬编码的文件名,可能在根目录中,将该文件解析为ram,然后跳转到ram中的程序。基于ARM的控制器肯定会让您执行以下操作。
一种替代方法是让引导加载程序通过spi读取sd卡,而不是复制到ram并将分支烧录到闪存的一部分。如果在开机或重置时按下按钮,则可能需要一个按钮,然后从SD卡中加载新程序;否则,如果签名或校验和在Flash的该可加载部分上看起来不错,然后在引导分支上到达该部分。或者,如果存在sd卡,则从其中加载,否则分支到闪存的可加载部分。可以将这种方法与基于arm和基于avr的应用程序结合使用,甚至可能基于图片,但是我的图片体验过时了。msp430我也会假设。基本上,如果您可以从微控制器处理器本身对执行的闪存部分进行重新编程,