Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Keil забивает память нулями.
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > MCS51
ratmir
Сделал свой первый проект в KeiluVision. Написал на С++ простенькую программулину для AT89C2051, отладил, в Proteuse все работает как надо. Но обнаружилось, что НЕХ имеет длину почти 3 КВ, при том, что длина кода 982 байта. Посмотрел карту Code Memory и оказалось, что начиная с адреса 0003h до адреса 0800h все заполнено нулями. Называется эта гирлянда нулей гордым именем *GAP*. Весь остальной код располагается за этим *GAP*. Естественно, в 2К Flash 2051-й не влезает. Я в Keilе новичок, внятной литературы, как на этом форуме уже писалось, нет. Пробовал менять настройки Keilа - не помогло. 4 дня бороздил Интернет - глухо. Как бороться с такой засадой?
Результат компиляции:

MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 806 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 ----
C51 COMPILER V9.00 C_PROB_3
IDATA SIZE = ---- ----
BIT SIZE = 10 ----
END OF MODULE INFORMATION.

C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

LINK MAP OF MODULE: C_prob 3 (C_PROB_3)

TYPE BASE LENGTH RELOCATION SEGMENT NAME
-----------------------------------------------------

* * * * * * * D A T A M E M O R Y * * * * * * *
REG 0000H 0008H ABSOLUTE "REG BANK 0"
DATA 0008H 0004H UNIT ?DT?C_PROB_3
000CH 0014H *** GAP ***
BIT 0020H.0 0001H.2 UNIT ?BI?C_PROB_3
0021H.2 0000H.6 *** GAP ***
IDATA 0022H 0001H UNIT ?STACK

* * * * * * * C O D E M E M O R Y * * * * * * *
CODE 0000H 0003H ABSOLUTE
0003H 07FDH *** GAP ***
CODE 0800H 0204H INBLOCK ?PR?MAIN?C_PROB_3
CODE 0A04H 008CH UNIT ?C_C51STARTUP
CODE 0A90H 0026H INBLOCK ?PR?BLINK_2_HL1?C_PROB_3
CODE 0AB6H 0026H INBLOCK ?PR?BLINK_2_HL2?C_PROB_3
CODE 0ADCH 0021H INBLOCK ?PR?OP_TK1?C_PROB_3
CODE 0AFDH 0021H INBLOCK ?PR?OP_TK2?C_PROB_3
CODE 0B1EH 0021H INBLOCK ?PR?OP_PNP1?C_PROB_3
CODE 0B3FH 0021H INBLOCK ?PR?OP_PNP2?C_PROB_3
CODE 0B60H 0021H UNIT ?C_INITSEG
CODE 0B81H 0019H INBLOCK ?PR?BLINK_1_HL1?C_PROB_3
CODE 0B9AH 0019H INBLOCK ?PR?BLINK_1_HL2?C_PROB_3
CODE 0BB3H 0010H INBLOCK ?PR?OP_BUT1?C_PROB_3
CODE 0BC3H 0010H INBLOCK ?PR?OP_BUT2?C_PROB_3
Палыч
1. Установить Device:
a) Menu -> Project -> Options for target
б) Выбрать вкладку Device
в) у производителя Atmel выбрать АТ89С2051
2. Установить параметры МК
а) Выбрать вкладку Target
б) Memory model = Small
в) Code ROM size = Small
г) Use on-chip ROM = галка
ratmir
Палыч, спасибо за ответ!
У меня в проекте все с начала именно так и было установлено. На другом форуме подсказали, что нужно в настройках линкера покопаться, но где конкретно копать неясно. Метод "тыка" не помог, да и не любитель я этого метода.

А вообще, тему можно закрывать, хотя, если бы удалось все-таки выяснить причину проблемы, было бы здорово.

Проект я переделал под TINY 2313, благо цоколевки совпадают. 4 часа - и все заработало.

С уважением к коллегам, Ratmir.
_NB
Цитата(ratmir @ Sep 1 2011, 18:29) *
А вообще, тему можно закрывать, хотя, если бы удалось все-таки выяснить причину проблемы, было бы здорово.

Похоже на то, что Вы используете Keil без таблетки.
ratmir
Цитата(_NB @ Sep 1 2011, 21:24) *
Похоже на то, что Вы используете Keil без таблетки.

У меня EVAL версия с офиц. сайта. Она до 2 кВ кода вроде не должна "болеть".
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.