从SD卡运行arduino sketch

时间:2016-03-19 09:25:50

标签: arduino

是否可以将草图(.HEX文件)放入SD卡并从那里运行? 我的目标是为程序使用SD存储而不是闪存。

如果是,是否有任何图书馆正是这样做的?

我发现的只是"从sd卡"闪烁arduino,我需要的东西。

UPDATE:

草图的loop调用是在引导加载程序中实现的。 所以我假设引导程序中有这样的东西:

while(true)
{
    call_sketch_loop();
}

可以改成这个吗? :

//signature changed from void loop() to int loop()
while(true)
{
    int retval = call_sketch_loop(); //get loop call's return value

    if( 0 == retval )
        continue; // if 0, iterate the loop as usual
    else
    {
        //copy 1.HEX from sd to flash and reboot
        copy_hex_from_sd_to_flash( retval + ".HEX" );
        reboot();
    }
}
  1. 将循环变换更改为int loop()
  2. 将{int} .HEX文件放入SD卡 - 1.HEX , 2.HEX , 3.HEX
  3. loop()调用返回0
  4. 像往常一样继续下一次迭代
  5. loop()调用返回2
  6. 将文件2.HEX从SD卡复制到程序闪存中
  7. 重启设备
  8. 通过这种方法,如果我们将它们分割成更小的子程序,我们就可以运行闪存容量超过的程序。

1 个答案:

答案 0 :(得分:2)

您正在寻找的技术术语是" SD卡引导加载程序"。

你有没有看过这个:" https://github.com/thseiler/embedded/tree/master/avr/2boots"?

据我了解,2boot将首先将十六进制加载到闪存中,然后从那里执行。这不是你想要的(你想把它直接加载到RAM,对吧?)。

你正在寻找的问题是arduino的RAM真的是small。直接加载到RAM中有一些优势。因此,这样的图书馆可能根本不存在。

我可以为这样做提出一个可怜的方法。首先编写一个草图,其中包含一个函数,该函数内部具有无限循环,并且在此循环内部,放置所需"循环的代码"。在草图的设置中,使用指向此函数的指针,并将足够的字节数写入SD卡上的二进制文件中。

然后上传另一个有空缓冲区的草图。此草图将二进制文件加载到其中,并将其作为指向函数的指针开始引用。 Viola,您现在可以执行"循环"。

这很难看,除非你有直接加载到RAM中的特定和同位素需求,我建议尝试使用2boot库。