JohnKorsh 1 28 мая, 2013 Опубликовано 28 мая, 2013 (изменено) · Жалоба Добрый день! Не поможет ли кто разобраться с Keil mVision? Использую версию 4.14.16.0 с таблеткой. Целевой микроконтроллер Si1020 от SiLabs (Flash 128 k, RAM 8 k). Язык разработки C. Пока отлаживал небольшие куски программ - радовался, как удобно. (Скомпилорованный файл - 6 K). Попробовал подключить FatFS и всё стало плохо - выдаётся ошибка переполнения памяти. (ERROR L107: ADDRESS SPACE OVERFLOW с последующей ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT ) Написал тестовую программу и совсем удивился: Программа 1 const char Test_Array [96] = // <--- !!! // По 32 знака в строке. (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // Закоментировал строку. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); //----------------------------------------------------------------------------- // main() Routine //----------------------------------------------------------------------------- void main (void) { char n; n = Test_Array [1]; // n упомянул, чтобы подлинковать Test_Array while (1) { } // while (1) } // main () Результат компиляции Build target 'Target 1' compiling main.c... linking... Program Size: data=106.0 xdata=0 code=248 creating hex file from "Test"... "Test" - 0 Error(s), 0 Warning(s). Программа 2 const char Test_Array [128] = // <--- !!! (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); //----------------------------------------------------------------------------- // main() Routine //----------------------------------------------------------------------------- void main (void) { char n; n = Test_Array [1]; while (1) { } // while (1) } // main () Результат компиляции Build target 'Target 1' compiling main.c... linking... *** ERROR L107: ADDRESS SPACE OVERFLOW SPACE: DATA SEGMENT: ?DT?MAIN LENGTH: 0080H *** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT SYMBOL: TEST_ARRAY SEGMENT: ?DT?MAIN Program Size: data=138.0 xdata=0 code=280 Target not created Та же ошибка, что и в моём проекте. (единственнея разница, что у vеня её много - по одной на каждую функцию FatFS) Почему? Ведь в микроконтроллере немеряно памяти для кода, откуда ADDRESS SPACE OVERFLOW ? Изменено 28 мая, 2013 пользователем IgorKossak [codebox] для длинного кода, [code] - для короткого!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lagman 1 28 мая, 2013 Опубликовано 28 мая, 2013 · Жалоба А сколько ноликов в строке? а сколько всего ноликов? А если не указывать размерность массива при инициализации, то может откомпилируется с вашим неправильным количеством ноликов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladimirZ 0 29 мая, 2013 Опубликовано 29 мая, 2013 · Жалоба Смотрите в описании к контроллеру Memory Organization, RAM в нём мало, XRAM - поболее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Edit2007 3 29 мая, 2013 Опубликовано 29 мая, 2013 · Жалоба в кейле даже const помещается в память по умолчанию (DATA, IDATA, XDATA) замените const на code, и массив однозначно ляжет во флешь Если же в процессе работы захотите его отредактировать, тогда укажите паямять xdata (вроде у силабсов около 1К всегда было) А так да - нехватка ОЗУ в чистом виде. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
JohnKorsh 1 29 мая, 2013 Опубликовано 29 мая, 2013 · Жалоба Спасибо. Понял. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться