Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: IDE Keil
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры
JohnKorsh
Добрый день! Работаю в среде Keil, пишу для Si1020 - микроконтроллер, совместимый с 8051 по командам, но 128 KB Flash и 8 KB RAM. При компиляции проекта возникла ошибка линковщика
L107 - Address Space Overflow, хотя в сумме размер скомпилированного кода 63138 байт, а RAM - 5116 байт, что меньше 128 К и 8 К, соответственно. Не поможет ли кто понять в чём я неправ?
kolobok0
Цитата(JohnKorsh @ Oct 17 2014, 09:34) *
...Не поможет ли кто понять в чём я неправ?


не конкретно по проблеме, но поиск таких ляпов лучше методом отсекания. выключаете кусок кода - ошибка есть, дальше режете. нет - лапополам
коментарий уменьшаете и так до строчки, если раньше не увидите глазками.
net
QUOTE (JohnKorsh @ Oct 17 2014, 09:34) *
Добрый день! Работаю в среде Keil, пишу для Si1020 - микроконтроллер, совместимый с 8051 по командам, но 128 KB Flash и 8 KB RAM. При компиляции проекта возникла ошибка линковщика
L107 - Address Space Overflow, хотя в сумме размер скомпилированного кода 63138 байт, а RAM - 5116 байт, что меньше 128 К и 8 К, соответственно. Не поможет ли кто понять в чём я неправ?

128k мне помнится это страничная память ее переключать надо
Палыч
Цитата(JohnKorsh @ Oct 17 2014, 09:34) *
Не поможет ли кто понять в чём я неправ?

Было бы легче Вам подсказать, если бы Вы привели бы текст сообщения об ошибке полностью.

Вероятная ошибка в том, что 8051 содержит в себе несколько типов RAM, отличающихся методами (командами) доступа к содержимому, и которые специфицируются нестандартными ключевыми словами: data, idata, bdata, xdata, pdata. Распределение переменных между этими типами RAM производится программистом (задается спецификатор типа памяти или команды линкера) либо самим транслятором\компановщиком путем задания модели памяти SMALL, COMPACT или LARGE.

Подозреваю, что Вам достаточно будет указать модель памяти LARGE, чтобы избавиться от ошибки.
JohnKorsh
Добрый день!
Memory model Large: Variables in XDATA. Пробовал даже перед декларацией каждой переменной ставить XDATA.
Code ROM size: Large 64 K Program Поставил галочки в Use OnChip ROM, Use OnChip XRAM.

Ошибка Error L107 - Address space Overflow.

Память, действительно, сегментирована, но первые 32 К - не сегментированные, переключаются на три банка "верхние" 32 К.
У меня программа на данный момент даже без оптимизации кода 63222 байта и RAM 2876 Байт. То есть должно умещаться без переключения сегментов.

Да, ещё, про оптимизацию. Использую прерывания по часовому таймеру (static void Alarm_isr (void) interrupt 8 using 1).
При уровне оптимизации кода до 2 (Data Overlaying) включительно работает как и хочу.
Если не изменяя кода поставить уровень оптимизации выше - прерывается один раз и дальше программа не идёт.
С отладчиком было бы просто, но, так как программа "пролеченная" аппаратный отладчик Silicon Laboratories USB Debug Adapter
умеет только загружать программу. Отлаживать приходится на Симуляторе, а он не умеет прерыватьсяя от таймера.
Может, кто сталкивался с нюансами оптимизации?

copov
Там где "Option for Target" поставьте banks равное 4
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.