Здравствуйте уважаемые, спасибо всем за ответы.
Вроде бы что-то получилось(прикрепил проект),но есть темные моменты:
1)вот например строка
__regvar __no_init uint8_t crc @10;
у меня так и не заработала,компилятор потребовал, я так понял зарезер-
вировать регистр r10 опцией --lock_regs, прописал в командной строке
--lock_regs 10, но все равно вылазили ошибки; насколько я понял таким
образом можно запретить компилятору использовать эти регистры (выделить под глобальную переменную) или мы указываем ему в какой регистр загружать переменную при обращении к ней?
2)команда @ xxxxx говорит компилятору,что переменная должна находится по адресу ххххх ,(char a @ 0x0140)?
3)как же все таки в Си коде сделать так,чтобы локальная переменная
загрузилась в нужный мне регистр,например в область локальных регистров r4-r15,r24-r27.Чтобы я потом вставляя ассемблерные вставки
не гадал куда он захочет в этот раз ее записать.
4)Чисто теоретический вопрос.Как я понял судя из документа AVR034: Mixing C and Assembly Code with IAR Embedded Workbench for AVR (весь винт перерыл,забыл что это аппнот
)в подпрограммах в область локальных регистров (r4-r15,r24-r27) напрямую обращаться нельзя,исходя из этого получается что выполнять диспетчер задач как
подпрограмму будет не корректно в плане того, что вызываемая задача будет вложенной подпрограммой для логики IARa,что может повлечь за собой плохую оптимизацию.Так ли это?
5)В проекте у меня не получилось в ассемблерных вставках,например
инструкцию ldi, выполнить с использованием символьного имени,в чем беда?
В начале я и хотел адреса хранить в ОЗУ, но потом мне стало очень жалко ОЗУ,да и стартануть такую функцию на мой взгляд очень долго,
слишком много sts,lds;со статической таблицей куда быстрее и flesh
не нак жалко,все таки 1 адрес = 1 инструкция всего то.
Но основная задача изучить тонкости IARa,и кодирования C+Asm,для
написания более оптимального кода,этот проект больше как тренинг
инженерной мысли,чем как чтот-то серьезное.
Для отработки алгоритмов, при переходе на Си, я вначале пытался
писать на Си,а потом переводить в Асм,но обычно у меня выходит новый алгоритм,который все равно нужно отлаживать,так что я это дело бросил.Я люблю Асм,но вернутся в АврСудио даже не тянет,уж очень долго все нужно делать,а писать на чистом Си я оптимально не умею,да и наверное все таки нет оптимальнее Асма, не разу не видел чтобы компилятор выдавал инструкцию LDD,STD например при инициализации
переферии,а мог бы,сколько бы памяти было сэкономлено.Поэтому решил
углубить свои знания.
Всем еще раз спасибо за помощь.
P.S.За проект сильно не бодайте,я только учусь.