Код
1. Хранить указатели не в регистровых парах не слишком оптимально (хотя и можно), т. к. всё равно требует пересылки.
Так вроде бы я так и делаю - выделил регистры под указатели . Или Вы хотите сказать что в регистрах держать указатели не выгодно ? Я не привел остальную часть программы в которой значения указателей меняются - в зависимости от условий используются разные таблицы но указатель один на одинаковый тип таблиц.
Код
2. Выражения, приведённые Вами, сводятся к константным, поэтому компилятор счёл возможным их заменить. Тем более, что в эти переменные не происходит сохранения, а значит они не нужны.
Почему же ? Я ж указатель могу и для чтения использовать и как итератор изменять значение указателя тоже можно для чтения из разных областей памяти (для того и использовал регистровый указатель). Речь не идет о том что вместо значения регистра изпользуется константа а наоборот - в другом месте программы где я читаю из flash с изпользованием этих регистров как указателей значения констант (адреса памяти во флеше) не используется вместо самого регистра, а наоборот, используется значение самого регистра. То есть налицо глюк а не оптимизация. При том варианте что я привел - программа не работает. Если поместить указатели в sram или при использовании регистровых указателей присвоить значение регистрам в какой либо другой функции (как я и делаю сейчас в листинге 112 // init_regs(); он закоментирован для симуляции проблемы) - все работает ОК.
Код
PS Не приводите длинных текстов в сообщении, а вкладывайте в приаттаченные файлы (исправьте предыдущий пост).
За это приношу свои извинения. Исправил.