2023-10-03

vak: (Default)
Добавил я минимальную периферию в симулятор, теперь проходят не только линуксные бинарники, но и собранные родным тулкитом Pico SDK. К примеру, возьмём простой пример типа Hello World с выводом на UART.
#include <stdio.h>
#include <pico stdlib.h="">
int main()
{
stdio_init_all();
printf("Hello from UART!\n");
for (;;) {
asm volatile("svc #1");
}
}
Компилируем в бинарник hello_uart.elf и запускаем в симуляторе:
$ picosim hello_uart.elf 
File: hello_uart.elf
Configuration: pico
----- Start -----
Hello from UART!

Info: /OSCI/SystemC: Simulation stopped by user.
----- Stop -----
Elapsed time: 0.011 seconds
System clock: 35833 ticks
Simulated: 32062 instructions
Simulation rate: 3280 kHz, 2935152 instructions/sec
Полную трассировку выполнения можно глянуть здесь: gist.github.com/sergev/43ac13abd030c5764f1d79a7f2e488b4

Заметьте общее количество выполненных машинных команд: больше 32 тысяч. Большую часть тут занимает код из ROM, пока он инициализирует и проверяет чип Flash-памяти. Можно хитрым образом пропустить ROM и стартовать прямо код из Flash:
$ picosim -s0x100001f6 hello_uart.elf 
File: hello_uart.elf
Configuration: pico
Start address: 0x100001f6
----- Start -----
Hello from UART!

Info: /OSCI/SystemC: Simulation stopped by user.
----- Stop -----
Elapsed time: 0.00174 seconds
System clock: 5621 ticks
Simulated: 3854 instructions
Simulation rate: 3231 kHz, 2215333 instructions/sec
Получается меньше 4 тысяч команд. Тут в основном работа с UART.

Трассировка без ROM доступна здесь: gist.github.com/sergev/546851c3032db9b65810f03b69c44006
vak: (Default)
Знакомьтесь: это опоссум Федя, наш сосед. Живёт у нас за забором. Днём где-то пропадает, а вечерами приходит и составляет нам компанию во дворе. Ведёт себя тихо, не буянит, кошечек не обижает.