ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
2 мая
113326
DL36 (16.02.2008 17:51, просмотров: 739)
jacOS при работе с 24 битными указателями. Компилятор не совсем адекватно транслирует код. Может не все читают микрочип. Преодолеть проблему можно следующим образом. В файле jacos.h в первой строке пишем #pragma psect text=taskOsMain добавляем опции линкера -L-PtaskOsMain=ADRESh, значение адреса должно быть выше середины доступной памяти. Я указываю 1Е000, это зависит от размера main. Хотя есть прикол, если указать в качестве адреса последнюю доступную ячейку памяти, в моем случае 1FFFFh, то структура данных создается нужной, а размещает как компилеру удобнее, ну это так лирическое отступление. Еще одно замечание, в одном проекте нельзя использовать задачи с тиками и без, это проблема преобразования типов, откорректировать можно, но мне сейчас неинтересно, и так почти три дня потерял. Так же надо подправить jacos.h следующим образом typedef OS_CVALIF struct OST_SEMAPHORE_ { OST_TASK_P queue; //Размер 2 байта, при трех требуемых, оптимизатор перестарался #ifdef POINTER_24 unsigned char tmp; //Дополнение до требуемого размера допустимо, поскольку вся работа ведется //посредством указателей. #endif #ifndef OS_USE_PRIO OST_TASK_P last; #ifdef POINTER_24 unsigned char tmp1; #endif #endif OST_SEM semaphore; } OST_SEMAPHORE; typedef OST_SEMAPHORE OS_VAR_LOC *OST_SEMAPHORE_P; typedef OS_CVALIF struct OST_FLAGS_ { OST_TASK_P queue; #ifdef POINTER_24 unsigned char tmp; #endif #ifndef OS_USE_PRIO OST_TASK_P last; #ifdef POINTER_24 unsigned char tmp1; #endif #endif OST_FLG flags; } OST_FLAGS; В jacnfg.h необходимо добавить определение #define POINTER_24 Нельзя сказать, что это ошибка компилятора, просто планировщик так написан. Мне необходимы только флаги, и семафоры с таймаутами, это я и подправил. Для очередей надо сделать то же.