是否可以将草图(.HEX文件)放入SD卡并从那里运行? 我的目标是为程序使用SD存储而不是闪存。
如果是,是否有任何图书馆正是这样做的?
我发现的只是"从sd卡"闪烁arduino,不我需要的东西。
草图的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();
}
}
int loop()
1.HEX , 2.HEX , 3.HEX
0
2
2.HEX
从SD卡复制到程序闪存中通过这种方法,如果我们将它们分割成更小的子程序,我们就可以运行闪存容量超过的程序。
答案 0 :(得分:2)
您正在寻找的技术术语是" SD卡引导加载程序"。
你有没有看过这个:" https://github.com/thseiler/embedded/tree/master/avr/2boots"?
据我了解,2boot将首先将十六进制加载到闪存中,然后从那里执行。这不是你想要的(你想把它直接加载到RAM,对吧?)。
你正在寻找的问题是arduino的RAM真的是small。直接加载到RAM中有一些优势。因此,这样的图书馆可能根本不存在。
我可以为这样做提出一个可怜的方法。首先编写一个草图,其中包含一个函数,该函数内部具有无限循环,并且在此循环内部,放置所需"循环的代码"。在草图的设置中,使用指向此函数的指针,并将足够的字节数写入SD卡上的二进制文件中。
然后上传另一个有空缓冲区的草图。此草图将二进制文件加载到其中,并将其作为指向函数的指针开始引用。 Viola,您现在可以执行"循环"。
这很难看,除非你有直接加载到RAM中的特定和同位素需求,我建议尝试使用2boot库。