Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с запуском uCOS-II на ATMEGA128.
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы
Ember
Коллеги !!! Кто юзает uCOS-II, поделитесь проэктиком приз под ATMega128. Желательно IAR 4.11. (Что то у меня с потоками каша какаято sad.gif... ).

Мне надо обработчик системного таймера сгородить. Когда вызываю ф-ю
OSTaskCreateExt() то у меня ATMega постоянно через сброс проходит,а когда
OSTaskCreate() не сбрасывается. Наверно чтото со стеками не все в порядке ?
Хотя обе функции возвращают OS_NO_ERR.
Andy Mozzhevilov
Цитата(Ember @ Oct 18 2005, 18:17)
Коллеги !!! Кто юзает uCOS-II, поделитесь проэктиком приз под ATMega128. Желательно IAR 4.11. (Что то у меня с потоками каша какаято sad.gif... ).

Мне надо обработчик системного таймера сгородить.  Когда вызываю ф-ю
OSTaskCreateExt() то у меня ATMega постоянно через сброс проходит,а когда
OSTaskCreate() не сбрасывается. Наверно чтото со стеками не все в порядке ?
Хотя обе функции возвращают OS_NO_ERR.
*


Предположение - у функции OSTaskCreateExt() параметров значительно больше, чем у OSTaskCreate(), и внутри она возможно (на память не вспомню, а посмотреть сейчас не могу) использует большее количество локальных переменных, которые ложатся в стек данных. Если стека данных, на котором производится инициализация недостаточно, то он будет залазить на соседние области, а в таких случаях поведение системы непредсказуемо, и сброс - далеко не худший вариант.
spf
Цитата(Andy Mozzhevilov @ Oct 20 2005, 22:01)
Предположение - у функции OSTaskCreateExt() параметров значительно больше, чем у OSTaskCreate(), и внутри она возможно (на память не вспомню, а посмотреть сейчас не могу) использует большее количество локальных переменных, которые ложатся в стек данных.  Если стека данных, на котором производится инициализация недостаточно, то он будет залазить на соседние области, а в таких случаях поведение системы непредсказуемо, и сброс - далеко не худший вариант.


Можно еще добавить что в случае активизации флага OS_TASK_CREATE_EXT_EN память потребляют и все структуры типа os_tcb, причем в немалы х количествах.
Не знаю IAR, как там распределяется и контролируется память... но думаю надо начинать с нее.
В первую очередь попробуй увеличить стеки задач.

На всякий случай ;-):
В конфиге установлено OS_TASK_CREATE_EXT_EN 1

И сообщи версию используемой ucos-ii.
JeDay
Всем спасибо. ОС заработала. Я неправильно стеки инициализировал.

OSTaskStkSize = OS_TASK_IDLE_STK_SIZE; // (1)
OSTaskStkSizeHard = OS_TASK_IDLE_STK_SIZE_HARD; // (2)
OSInit();

OSTaskStkSize = OS_TASK_START_STK_SIZE; // (3)
OSTaskStkSizeHard = OS_TASK_START_STK_SIZE_HARD; // (4)
OSTaskCreateExt(Task_Start,
(void *)0,
(OS_STK *)&TaskStartStk[OSTaskStkSize - 1],
OS_TASK_START_PRIO,
OS_TASK_START_PRIO,
(OS_STK *)&TaskStartStk[OSTaskStkSizeHard],
OSTaskStkSize - OSTaskStkSizeHard,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);

Я пункты 1,2 пропустил, а место 3,4 в ф-ю OSTaskCreateExt размеры стеком напрямую прописывал.

(Писал от имени Ember, он зыбил выход нажать smile.gif )
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.