Fujitsu.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено VoSi 07 августа 2003 г. 11:43

Fujitsu MB90F543, Softune 3.4, UCOS-II v2.52
Используется только системный стек который расположен во внешней памяти (начинается с адреса 0х100000). Имеется две функции (вложенные), в первой определена локальная переменная (т.е. расположена в стеке), адрес которой передается второй функции (естественно через тот же стек). Поскольку стек расположен во внешней памяти, адрес у переменной 24-х битовый, однако при передаче этого адреса в функцию, в стек пишутся только его младшие два байта. И вторая функция получает неверный указатель. Модель памяти LARGE. Если объявить переменную как static или как глобальную (т.е. она будет расположена вне стека, но так же во внешней памяти), то адрес передается корректно.

void first_fun(void)
{
INT16U var = 0x1234;
// например &var = 0x105c24
second_fun(&var);
// здесь var должна быть равна 0х5678 - не работает, т.к.
// second_fun получила не тот адрес!
}

void second_fun(INT16U *var)
{
// здесь var должен быть равен 0x105c24, на самом деле var=0x005c24
*var = 0x5678;
}

Можно ли использовать USER stack с UCOS-II?

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

Ответы



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

E-mail: info@telesys.ru