JohnKorsh 1 17 октября, 2014 Опубликовано 17 октября, 2014 · Жалоба Добрый день! Работаю в среде Keil, пишу для Si1020 - микроконтроллер, совместимый с 8051 по командам, но 128 KB Flash и 8 KB RAM. При компиляции проекта возникла ошибка линковщика L107 - Address Space Overflow, хотя в сумме размер скомпилированного кода 63138 байт, а RAM - 5116 байт, что меньше 128 К и 8 К, соответственно. Не поможет ли кто понять в чём я неправ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kolobok0 0 17 октября, 2014 Опубликовано 17 октября, 2014 · Жалоба ...Не поможет ли кто понять в чём я неправ? не конкретно по проблеме, но поиск таких ляпов лучше методом отсекания. выключаете кусок кода - ошибка есть, дальше режете. нет - лапополам коментарий уменьшаете и так до строчки, если раньше не увидите глазками. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
net 0 18 октября, 2014 Опубликовано 18 октября, 2014 · Жалоба Добрый день! Работаю в среде Keil, пишу для Si1020 - микроконтроллер, совместимый с 8051 по командам, но 128 KB Flash и 8 KB RAM. При компиляции проекта возникла ошибка линковщика L107 - Address Space Overflow, хотя в сумме размер скомпилированного кода 63138 байт, а RAM - 5116 байт, что меньше 128 К и 8 К, соответственно. Не поможет ли кто понять в чём я неправ? 128k мне помнится это страничная память ее переключать надо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 6 18 октября, 2014 Опубликовано 18 октября, 2014 · Жалоба Не поможет ли кто понять в чём я неправ? Было бы легче Вам подсказать, если бы Вы привели бы текст сообщения об ошибке полностью. Вероятная ошибка в том, что 8051 содержит в себе несколько типов RAM, отличающихся методами (командами) доступа к содержимому, и которые специфицируются нестандартными ключевыми словами: data, idata, bdata, xdata, pdata. Распределение переменных между этими типами RAM производится программистом (задается спецификатор типа памяти или команды линкера) либо самим транслятором\компановщиком путем задания модели памяти SMALL, COMPACT или LARGE. Подозреваю, что Вам достаточно будет указать модель памяти LARGE, чтобы избавиться от ошибки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
JohnKorsh 1 20 октября, 2014 Опубликовано 20 октября, 2014 · Жалоба Добрый день! 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 2 22 октября, 2014 Опубликовано 22 октября, 2014 · Жалоба Там где "Option for Target" поставьте banks равное 4 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться