Napisałem prosty metalowy przykład wielordzeniowy.
Kod, schemat obwodu jest tutaj - https://github.com/jeffreyantony/multipi/tree/master/Example_01
W moim przykładzie do pinów GPIO raspberry Pi podłączone są 3 diody LED. W Raspberry Pi 2. znajdują się 4 rdzenie. Każdy z nich ma przypisane miganie odpowiedniej diody LED.
Napisałem adres kodu do wykonania przez każdy rdzeń w poniższych adresach 0x4000009C dla rdzenia 1 0x400000AC dla rdzenia 2 0x400000BC dla rdzenia 3
Po skompilowaniu kodu miga tylko dioda LED przypisana do rdzenia 1 (jak w tym przykładzie żółta dioda LED). Inni nie są.
Oznacza to, że kod dla Core 2 i 3 nie są uruchomione (ponieważ inne diody LED nie migają). Odkryłem również, że kod po uruchomieniu wszystkich rdzeni również nie działa, tj. Core0_submain () - ta funkcja powinna mrugać diodą ACT na Raspberry Pi
Czy ktoś mógłby mi powiedzieć, na czym polega problem? Czy to dlatego, że wszystkie 4 rdzenie próbują pisać do tego samego rejestru GPIO, a wygrywa tylko Core 1?
Próbowałem dodać „ atrybut ((goły));” dla core0_submain (), ale nie było sensu.
Korzystam z zestawu narzędzi z https://launchpad.net/gcc-arm-embedded
jeszcze raz kod - https://github.com/jeffreyantony/multipi/blob/master/Example_01/main.c
makefile - https://github.com/jeffreyantony/multipi/blob/master/Example_01/Makefile
Aktualizacja 20 października 2015 : Dodałem obsługę JTAG. Ale nie udało się uzyskać interfejsu debugowania
Aktualizacja 25 października 2015 : Problem został rozwiązany. Zobacz odpowiedź.