[an error occurred while processing this directive]
Неприятные грабли в Keil 7.0
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено AlexD 23 августа 2002 г. 02:12

Неправильное распределение памяти.
После долгого "выкусывания" представляю на ваш суд следующий пример:

#include <ATMEL/AT892051.H>
//#include <stdlib.h>
//#include <INTRINS.H>

typedef unsigned char uchar;
typedef signed char schar;
typedef unsigned int uint;

uchar rrr (uchar x){
return x;
}

void f (uchar x) {
uchar tmp ;
tmp = rrr(0);
}

typedef void (*tab_proc_type)(uchar);
tab_proc_type tab_proc[] = {&f,&f,&f};

//------------------------------ M A I N ----------------------------------
//
void main (void) {
uchar new_proc = 2;
uchar old_proc = 2;

(*tab_proc[old_proc])(0);

while (1) ;
}
//------------------------------- E N D -----------------------------------



Created with The Source Studio - EVALUATION version

Если прогнать код на симуляторе, поставив брекпоинт супротив последнего while,
то хорошо видно, что переменные new_proc и old_proc волшебным образом обнуляются.
Не знаю, может быть косвенно вызываемые функции нужно объявлять как reentran,
но шишку я набил :-(.

Интересно, а как обстоят дела в V7.01 ?

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru