Взял самый примитивный код
Код
void main (void)
{
OSInit();
OSStart();
printf("FATAL return from OSStart");
}
{
OSInit();
OSStart();
printf("FATAL return from OSStart");
}
При таком коде операционка должна крутится все время в Idle. Но проц улетает в ексепшен. Сначала грешил на порт но потом начал разбираться и наступил на какие то грабли.
Разберательстава привели к ....
Код
1 void OSStart (void)
2 {
3 if (OSRunning == OS_FALSE) {
4 OS_SchedNew(); /* Find highest priority's task priority number */
5 OSPrioCur = OSPrioHighRdy;
6 OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy]; /* Point to highest priority task ready to run */
7 OSTCBCur = OSTCBHighRdy;
8 OSStartHighRdy(); /* Execute target specific code to start task */
9 }
10}
2 {
3 if (OSRunning == OS_FALSE) {
4 OS_SchedNew(); /* Find highest priority's task priority number */
5 OSPrioCur = OSPrioHighRdy;
6 OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy]; /* Point to highest priority task ready to run */
7 OSTCBCur = OSTCBHighRdy;
8 OSStartHighRdy(); /* Execute target specific code to start task */
9 }
10}
в строке 4 вызывается OS_SchedNew(); кооторая меняет OSPrioHighRdy (как по мне эта функция должна возвращать значение а не менять глобальную переменную) так вот после вызова OSPrioHighRdy == 0, соответственно далее из таблицы OSTCBPrioTbl выбирает указатель 0 приоритета (а его то нету

уже 3 час вожусь где грабли то ?