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.

Все строки, макросы и подпрограммы будут удалены.
Проект похудеет на несколько килобайт и уйдут задержки.

Внезапное исключение задержек из кода, так же может повлечь последствия..


Будьте внимательны!