реклама на сайте
подробности

 
 
> Keil 9+Silabs C51+pdata, Как зарезервировать память под стек?
1kvi1
сообщение Mar 17 2011, 06:59
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 36
Регистрация: 5-12-10
Пользователь №: 61 414



Всем, привет!
Делаю первый проект на С для С51.
Возникла следующая проблема.
При использовании модели памяти compact не удается определить местоположение стека.
То есть при вызове reentrant функции портятся переменные расположенные в памяти xdata по адресу меньше 0x100.
Проверил все опции, прочитал хелп, пользовался поиском - не могу найти решения проблемы.
Подскажите кто знает как исправить проблему.
Заранее спасибо!

Линкер генерит такую таблицу памяти

ACTIVE MEMORY CLASSES OF MODULE: msd-silabs (F34X_MSD_USB_MAIN)

BASE START END USED MEMORY CLASS
==========================================================
X:000000H X:000000H X:000FFFH 000CECH XDATA
X:000000H X:000000H X:000FFFH HDATA
C:000000H C:000000H C:00FFFFH ECODE
B00:0000H C:000000H C:00FFFFH HCONST
C:000000H C:000000H C:00FFFFH 008E13H CODE
X:000000H X:000000H X:0000FFH 0000B7H PDATA
I:000000H I:000000H I:00007FH 000046H DATA
C:000000H C:000000H C:00FFFFH 000131H CONST
I:000000H I:000000H I:0000FFH 000080H IDATA


Сообщение отредактировал 1kvi1 - Mar 17 2011, 06:21
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AndreyS
сообщение Mar 18 2011, 07:00
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 235
Регистрация: 28-01-05
Из: Санкт-Петербург
Пользователь №: 2 276



Цитата(1kvi1 @ Mar 17 2011, 10:59) *
Всем, привет!
Делаю первый проект на С для С51.
Возникла следующая проблема.
При использовании модели памяти compact не удается определить местоположение стека.
То есть при вызове reentrant функции портятся переменные расположенные в памяти xdata по адресу меньше 0x100.


Добрый день.
В стартап файле есть поля инициализации программного стека (в частности и для перевызываемых функций).

Вот кусок из моего стартапа
Код
;------------------------------------------------------------------------------
;
;  Reentrant Stack Initilization
;
;  The following EQU statements define the stack pointer for reentrant
;  functions and initialized it:
;
;  Stack Space for reentrant functions in the SMALL model.
IBPSTACK    EQU    1; set to 1 if small reentrant is used.
IBPSTACKTOP    EQU    0FFH+1; set top of stack to highest location+1.
;
;  Stack Space for reentrant functions in the LARGE model.    
XBPSTACK    EQU    1; set to 1 if large reentrant is used.
XBPSTACKTOP    EQU    0FFFFH+1; set top of stack to highest location+1.
;
;  Stack Space for reentrant functions in the COMPACT model.    
PBPSTACK    EQU    1; set to 1 if compact reentrant is used.
PBPSTACKTOP    EQU    0FFFFH+1; set top of stack to highest location+1.
;
;------------------------------------------------------------------------------


Удачи

Сообщение отредактировал AndreyS - Mar 18 2011, 07:02


--------------------
Удачи.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th August 2025 - 00:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01379 секунд с 7
ELECTRONIX ©2004-2016