NXP i.MX7D
вывод отладочной информации
В рамках проекта по инициализации камушка i.MX7D был создан форматированный вывод отладочной информации
макросами
printf и
Дамп. Работают они не очень быстро, так как это простой линейный код. Но зато эффективно.
Команда Дамп выводит содержимое памяти в шестнадцатеричном и текстовом виде.
Дамп адрес, размер - адрес начала дампа и размер в байтах, кратный 16.
В результате напечатается нечто
подобное.
В терминале должна быть активирована тема Solarized.
Русские буквы выделяются оранжевым.
printf довольно наворочен и выводит содержимое регистров, текст и управляющие символы.
printf "текст в кавычках"
В кавычках может быть не только текст, но и управляющие символы.
Основной управляющий символ - знак процента
%
За которым следует имя регистра и его формат.
Формат вывода содержимого регистров может быть следующий:
H - шестнадцатеричный
D - десятичный
S - десятичный формат со значком + или -
F - десятичный формат с плавающей точкой
printf "%R3H" - напечатает содержимое R3 в формате hex
printf "%D15F8" - напечатает содержимое D15 в плавучем формате с точкой и знаком
с 8 символами после запятой
Формат плавающей точки не округляется, а выводится в том виде, как он есть в машине.
При этом, количество символов после запятой задаётся ещё одним знаком после
F.
После запятой, можно вывести от 1 до 57 символов.
Нули в конце не обрезаются.
Количество символов после запятой задаётся одной буквой или цифрой.
Из таблицы можно понять, какой символ соответствует нужной вам длине.
1=1 | | A=10 | | J=19 | | S=28 | | b=37 | | k=46 | | t=55 |
2=2 | | B=11 | | K=20 | | T=29 | | c=38 | | l=47 | | u=56 |
3=3 | | C=12 | | L=21 | | U=30 | | d=39 | | m=48 | | v=57 |
4=4 | | D=13 | | M=22 | | V=31 | | e=40 | | n=49 | | |
5=5 | | E=14 | | N=23 | | W=32 | | f=41 | | o=50 | | |
6=6 | | F=15 | | O=24 | | X=33 | | g=42 | | p=51 | | |
7=7 | | G=16 | | P=25 | | Y=34 | | h=43 | | q=52 | | |
8=8 | | H=17 | | Q=26 | | Z=35 | | i=44 | | r=53 | | |
9=9 | | I=18 | | R=27 | | a=36 | | j=45 | | s=54 | | |
FLDS S0, 18.7 @ Загрузить число в регистр
printf "S0 = %S0FC\n" @ C = 12 символов после запятой
Результат: S0 = 18.700000762939 @ Актуальное значение регистра
Без округления!! Если справа ещё остались символы, они просто не выводятся на экран.
FLDD D0, 0.001
printf "D0 = %D0Fv\n" @ v = 57 символов после запятой
Результат: D0 = 0.001000000000000000020816681711721685132943093776702880859
Округление в команде
printf отсутствует принципиально. Всё выводится строго как есть.
Так как основная задача printf, это отладка, а не украшение.
Максимальное целое число
до запятой, которое может быть напечатано: +/- 18446742974197923840
Ограничение: регистры
Q невозможно отобразить в десятичном формате,
так как по сути они не являются регистрами, а только лишь ссылками на пару D-регистров.
В текст можно вставлять управляющие символы в восьмеричном формате. Экранируйте их слешем.
printf "\33[91;100" - установить цвет символов и фона
И ещё одна интересная возможность - отобразить состояние флагов CPSR
printf "%Ф" - напечатает состояние пяти флагов: N, Z, C, V и Q
Активные флаги будут выделены красным цветом
Для корректного отображения цветов
Дампа и
%Ф, у вас должен быть установлен Tera Term
с активированной цветовой схемой
Solarized.
Макрос
printf вносит большие задержки в исполняемый код.
Скорость печати на мегабитном порту = 3.3 микросекунды на символ.
Если вам нужно напечатать 100 символов, программа остановится на ~~ 330 микросекунд.
Что бы полностью исключить функциональность
printf из проекта, не обязательно тереть код.
Достаточно установить флаг
Использовать_printf = 0. Смотрите файл
main.asm.
Все строки, макросы и подпрограммы будут удалены.
Проект похудеет на несколько килобайт и уйдут задержки.
Внезапное исключение задержек из кода, так же может повлечь последствия..
Будьте внимательны!