נניח שכתבתי סקיצה מקובצת ל- EEPROM ואז קראתי אותה. האם אוכל להריץ את התוכנית מ- EEPROM? אני מניח שהשאלה היא: האם ארדואינו יכולה להריץ תוכנה שלא בזיכרון פלאש באמצע ביצוע התוכנה בפלאש?
נניח שכתבתי סקיצה מקובצת ל- EEPROM ואז קראתי אותה. האם אוכל להריץ את התוכנית מ- EEPROM? אני מניח שהשאלה היא: האם ארדואינו יכולה להריץ תוכנה שלא בזיכרון פלאש באמצע ביצוע התוכנה בפלאש?
תשובה קצרה: לא; מדף הנתונים של atmega328 (אם כי הוא חל על כל מכשירי ה- AVR):
AVR משתמש בארכיטקטורה של הרווארד - עם זיכרונות ואוטובוסים נפרדים לתכנית ולנתונים. הוראות בזיכרון התוכנית מבוצעות באמצעות צינור ברמה אחת. בזמן שמתבצעת הוראה אחת, ההוראה הבאה נשלפת מראש מזיכרון התוכנית
...
שטח זיכרון פלאש של התוכנית מחולק לשני חלקים, החלק של תוכנית האתחול ו סעיף תוכנית היישומים. בשני הסעיפים יש ביט נעילה ייעודי להגנה על כתיבה וקריאה / כתיבה. הוראות SPM הכותבת למקטע זיכרון Flash של האפליקציה חייבות להיות במקטע תוכנית האתחול
הארכיטקטורה שלה מונעת שימוש בזיכרון תוכנה חיצוני, אך תוכל לטעון כל דבר לזיכרון התוכנית בעת האתחול. באותה נקודה הייתי מעז לומר שאתה רק מתכנת AVR ולא arduino, מכיוון שתצטרך להחליף את ה- bootloader של arduino ולשבור את היכולת של arduino IDE להעלות תוכניות.
לחלופין תוכל גם להשתמש באמולטור או מתורגמן של שפת ביניים כלשהי; בעצם קוד שעובר דרכו ומריץ קוד אחר. ככלל אמולטור פועל פי 8 לאט יותר.
ישנם מיקרו-בקרים ממותגים אחרים שאכן תומכים בפונקציונליות זו. אני יודע שכמה PIC שונים עושים.
לא היסוד של ארכיטקטורת הרווארד כמו AVR הוא לאפשר ביצוע קוד שקיים בשטח התוכנית בלבד, ו- EEPROM אינו נמצא בתוך שטח התוכנית. עם זאת, ניתן לכתוב מכונה וירטואלית שתפעל מ- flash. לאחר מכן ה- VM הזה יכול לקרוא את התוכנה ולהפוך לנתונים מכל מקום ולנקוט פעולה על סמך זה.