Codevision глюки?
Всем привет. Началось все с того что решил прикрутить протопотоки для TINY2313, т.к. даже минимальная mRTOS жрет половину флеши.
Решил начать с CVavr т.к. есть обучалки по нему неплохие, правда с кучей рекламы, я думаю вы поняли(это к тому почему не GCC). Так вот протопотоки не заработали сразу, ругаясь на
PT_INIT(&pt) что разворачивается в (pt)-›lc=0;
codevision требовал перед -› указатель на структуру. Решилось дел вводом доп переменной:
static struct pt *ptrs;
ptrs=&pt
PT_INIT(ptrs);
Программка было зажужжала в протеусе, но после пары секунд работы вываливаются ворнинги. путем долгих поисков выяснилось что :
(pt)-›lc = 45
CVavr преобразует в:
1 LDD R26,Y+5
2 LDI R30,LOW(45)
3 LDI R31,HIGH(45)
4 ST X+,R30
5 ST X,R31
Оказалось что старший регистр r27 регистровой пары X , принимает значения в процессе предыдущих сложений long int где то в теле программы, а при загрузке адреса переменной(строка 1) грузиться только младший регистр а старший не грузиться,не очищается и соответственно в какой то момент в место адреса 88 попадаю на 188.
Теперь вопросы:
1.Можно ли что нибудь с этим сделать на CVavr что бы не переписывать всю библиотеку PROTOTHREADS , или забыть и уйти на студию с GCC пока не поздно? (оптимизации в настройках CV ставил разные, не помогает.) .
2. Может я первоначально все испортил когда ввел переменную при инициализации?
3.Зачем строка 3 и 5 Если число 1 байт??????
|