Přeskočení instrukce

Ahoj zkušení programátoři,
díky za komentáře. Z těch všech vašich námětů se mi jako jedinej použitelnej jeví nápad s

Musim se přiznat, že o tomhle jsem slyšel poprvé a příjde mi to jako řešení. Trochu jsem o tom poguglil a našel přepínač pro GCC kompilátor s názvem

viz.:
gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html
Dneska jsem na to neměl moc času, ale vyzkoušel jsem zkopilovat kód s tímto přepínačem a povedlo se to. Očekával jsem, že kód bude o něco větší, protože kompilátor nyní nepoužívá absolutní skoky a tak nebude moci využít všech optimalizačích metod. Očekávání se skutečně vyplnilo, takže to bude asi správná cesta. Uplnej masakr by bylo převědčit kompilátor tak, aby jednu část programu kompiloval optimalizovanou a jinou jako PIC tedy jako

jak se metoda asi nazývá. To je asi dost scifi, ale podle hesla, které mi často říká můj boss

na to asi dřív nebo později příjdu.

No a teď vysvětlení proč se takovouhle pro zkušené programátory prkotinou zabejvám…

  1. ten jednoduchej důvod - nestudoval jsem tolik let abych pak jen kopíroval metody jinejch lidí, mám vlastní hlavu s milionama nápadů a chci jí používat.
  2. ten horší důvod - nějakej jouda vymyslel, že chce vyvynout nějakou řídící jednotku. Pak si vymyslel, že jí chce připojit k internetu. A nakonec si vymyslel, že si chce furt vymejšlet a že v tý jednotce chce mít každou chvíli nějaký nový funkce. A aby toho nebylo málo, chce mít ty jednotky rozsetý po celý republice. Mimoto nějakej jinej jouda jí dostal až do Austrálie což je super, protože tam další jiný joudové používají náš HW s mým SW. Na začátečnickýho programátora, kterej řeší všechno do detailu docela dobrý ne :slight_smile:)

Z tohoto důvodu musí bejt všechno naprosto spolehlivý. Neexistuje, že když se něco nepovede tak k tomu někdo příjde vypne/zapne napájení nebo,že program prostě nedělá to co má. A pokud náhodou začne něco co nemá dělat musí, se z toho sám dostat.

Takže nápad (tohle berte s rezervou…napíšu to jako soustavu myšlenek):
Rozdělit paměť na několik částí jak jsem psal…BIOS, APPL, APPL_MIRR.
Část BIOS nelze chápat jako bootloader, ale jako program kterej běží na pozadí a stará se o to, aby zařízení bylo kdykoliv je potřeba na síti a nadřazenej dohledovej systém s ním mohl kdykoliv manipulovat. No a APPL je prostě to, co to zařízení dělá. Jo a teď to nejlepší…všechno to musí fungovat najednou, protože toho joudu nezajímá, že na zařízení právě probíhá upgrade SW, kterej si ke všemu sám vymyslel. Jo aby toho nebylo málo ještě chce to zařízení zároveň na dálku ovládat. Takže v základu běží program z části buď APPL nebo APPL_MIRR. V případě nového upgradu se SW nahraje do části odkud program nebeží. Jakmile je programování dokončeno novej SW se spustí. Tím, že se novej SW spustí neznamená, že se resetuje MCU, ale že se původní aplikace vypne a zapne se jiná, všechno za běhu…
Zde se to malinko komplikuje, protože aby tohle mohlo správně fungovat musí se program dvakrát překompilovat a vytvořit jeden binární obraz doplněnej o dvě CRC aby mohla aplikace bežet z různejch oblastí. Protože systém, kterej ty jednotky přeprogramovává neví z jaké oblasti právě běží aplikace, musí mít k dispozici obě ‘‘zrcadla’’.

No a teď si představte, že nemáte dva obrazy stejné aplikace a že máte jen jeden, kterej můžete nahrát tam i tam. Stačí vám jednou zkompilovat, spustit skript třeba v pythonu a řídící jednotka, která vám řídí celý dům a která je umístěná někde ve sklepě domu se vám do pár sekund spustí s novým sw. Tohle je budoucnost mého vývoje sw.

Moc díky Radiusovy za nakopnutí.