Witam
W opisie mikrokontrolerów ARM7 lub ARM9 czesto pisze sie o rdzeniu tych mikrokontolerów np ARM7TDMI czy ARM966E-S lub Cortex. Czy w przypadku ATMEGA istnieje rdzeń na którym sa zbudowane. Cy można mówić o jakimś rdzeniu uC w tym przypadku? Niestety w opisach dotyczacych avr z którymi sie zetknąłem nie ma o tym mowy.
Tak, AVR ma też swój rdzeń, ale ponieważ został on zaprojektowany wyłącznie dla rodziny AVR więc nie jest wyróżniony, ponieważ nie występuje nigdzie indziej, tworzy całość z mikrokontrolerem. Z rdzeniami ARM jest trochę inaczej, ponieważ rdzeń jest licencjonowany przez ARM, więc nie jest on związany z konkretnym mikrokontrolerem, wielu producentów używa identycznego rdzenia, ale mikrokontrolery różnią się np. peryferiami, częstotliwością taktowania, pamięcią itd.
W zasadzie chodzi mi o umiejetność programowania danego rdzenia w danym języku. Czy metodyka programowania uC różnych firm ale z danym rdzeniem ARM jest taka sama. Np. w AVR mamy do czynienia ze zgodnością metodyki tzn. piszac program pod Atmege8 i wgrywajac go do Atmega256 wszystko bedzie funkcjonować Czy to samo tyczy sie uC z takim samym rdzeniem?
Ja osobiście nie mam problemów z przenaszalnością kodu w firmowym asemblerze Atmela, nawet pomiędzy różnymi wersjami rdzenia, gdyż są w nim wbudowane definicje pozwalającej na asemblację warunkową. Przykład - instrukcja lpm, zamiast której używam następujące makro:
Z drugiej strony, w dziale DIY Konstrukcje jest prosta pozytywka, która była uruchamiana na ATmega8515, a kod docelowy jest na ATmega8. Pomimo, ze to jest na tej samej wersji rdzenia, konieczne była zmiana z Timer0 na Timer2, gdyż ten pierwszy w ATmega8 nie posiada przerwania "On Compare Match", podczas, gdy w ATmega8515 ono jest. Jak widać, nie ma uniwersalnej reguły, szczegóły jak zwykle w notach aplikacyjnych... Co do wgrywania wsadu skompilowanego na inny mikrokontroler, to raczej nie działa (głównie przez różnie obłożone wektory przerwań, listę rozkazów - np. powyżej 8kB dochodzi call, a rcall jest inaczej kompilowany), co więcej jako przykład podam ATtiny2313 vs. ATtiny2313A - wsad skompilowany na ten pierwszy może się dziwnie zachowywać, gdyż ATtiny2313A ma dwa wektory przerwań więcej (2xPC_INT).