Programuję płytę wykrywającą STM32 Cortex M0 (32F0308DISCOVERY) przy użyciu OpenOCD, arm-none-eabi-gcc i gdb. Zastanawiałem się, czy jest jakiś prosty sposób na rejestrowanie komunikatów debugowania przez SWD. Czytałem o opcji semihosting, ale wydaje się, że wymaga to wciągnięcia newlib lub innych dużych bibliotek. (Dostępna jest tylko pamięć flash 64k.) Czy istnieje bardziej lekki sposób na rejestrowanie tekstu przez SWD, czy też używanie UART jest jedyną praktyczną opcją?
15
Odpowiedzi:
Dzięki za wskazówki, markt i chris-stratton. Opcja półhostingu okazała się dość prosta. Udało mi się znaleźć źródło kilku prostych procedur rejestrowania, które mogą wysyłać wiadomości do konsoli OpenOCD. Zamieszczę je tutaj, ponieważ (i) wymagały one modyfikacji, aby działały oraz (ii) Myślę, że te informacje nie są bardzo łatwe do znalezienia dla osób, które dopiero zaczynają.
Pierwszy kod D tutaj łatwo dostosowany, aby zapewnić następującą funkcję: C:
Przykład wywołania polecenia send_command w celu napisania ciągu znaków do konsoli OpenOCD:
Po drugie, funkcja putChar podana w komentarzach tutaj działa dobrze, z tym wyjątkiem, że musiałem dodać „#” przed 0x03:
Aby zobaczyć wyniki tych funkcji, najpierw uruchamiam OpenOCD, a następnie łączę się za pomocą arm-none-eabi-gdb w następujący sposób:
Zauważ, że komunikaty pojawiają się na standardowym etapie procesu OpenOCD, a nie na konsoli GDB.
źródło
putchar
tak proste, jakvoid putchar(char c) { send_command(3,&c); }