yung 0 6 апреля, 2012 Опубликовано 6 апреля, 2012 · Жалоба ICC6.31a Professional Atmega128. Исходный код разросся и при компиляции выскочила ошибка: 'text' area too large (>64K byte) и предложение перенести часть кода в другой файл. Заполнение 55%. Подергавшись и ничего не добившись, решил перекомпилировать на ICC7. На некоторое время помогло (просто объем выходного кода чуть уменьшился). Сейчас опять та же проблема (заполнение 57%). Осознаю, что компилятор не может осилить константы в верхней половине памяти. Поэтому переделал код таким образом, что все строковые константы расположил в начале, а доступ к ним - из одной-единственной подпрограммы. Не помогает. При анализе ассемблера нашел внутреннюю процедурку elpm32. Вставляется ближе к концу файла. Похоже, что она мне жизнь и отравляет. Победить как-нибудь можно? В настройках проекта пробовал и разрешать, и запрещать RAMPZ/ELPM - без толку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arttab 0 6 апреля, 2012 Опубликовано 6 апреля, 2012 · Жалоба может указатель должен быть более 2Байтов? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yung 0 6 апреля, 2012 Опубликовано 6 апреля, 2012 · Жалоба Даже не может, а наверняка. Проблема в том, что архитектура AVR предполагает наличие только 2-байтных указателей(максимально адресуется 64 к). Когда появилась 128-я мега, разрядность счетчик команд увеличили, а указателей - невозможно. А я пока не могу угадать, когда компилятор пытается что-то грузить из флэша. То ли все же какие-то константы грузит, то ли таблицы переходов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GDI 0 6 апреля, 2012 Опубликовано 6 апреля, 2012 · Жалоба В IARе была huge memory для этого и идентификаторы переменных __huge и __hugeflash. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yung 0 6 апреля, 2012 Опубликовано 6 апреля, 2012 · Жалоба Не победил, но обошел :laughing: В опциях проекта выделил верхнюю область памяти (0х10000.0х1Е000, дальше у меня бут-лодер, оформленный отдельным проектом). В эту область переместил большинство своих процедур. Таким образом освободилось место в нижней половине памяти для библиотечных функций (злополучная elpm32). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mempfis_ 0 6 апреля, 2012 Опубликовано 6 апреля, 2012 · Жалоба Обозначте кусок памяти к которой Вы хотите обратится как __farflash. или используйте указатели типа __farflash unsigned char* для доступа к flash памяти за пределами 64к. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 9 6 апреля, 2012 Опубликовано 6 апреля, 2012 · Жалоба Обозначте кусок памяти к которой Вы хотите обратится как __farflash... Разве такое возможно в среде от ImageCraft ? Вероятно, всё дело в: To access Flash memory beyond 64K bytes (e.g. on a M103 or M128), the ELPM instruction must be used in conjunction of setting the RAMPZ bit to 1. A check box ("Use ELPM") has been added to the Compiler Target Options page for this purpose. This is useful for bootloader that are in the high memory. Unfortunately, in the general case, the compiler cannot determine whether a pointer to the flash memory is pointing to the high or low memory. You must enable this check box manually if you are putting constant data in the high memory and you must set the RAMPZ bit yourself. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prottoss 0 6 апреля, 2012 Опубликовано 6 апреля, 2012 · Жалоба ...и предложение перенести часть кода в другой файл.Может нужно просто указать выходной файл Intel EXTENDED :) У Вас наверняка стоит просто Intel :) который рассчитан на описание только 64 кБайт кода. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yung 0 6 апреля, 2012 Опубликовано 6 апреля, 2012 · Жалоба Мой выбор :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prottoss 0 6 апреля, 2012 Опубликовано 6 апреля, 2012 · Жалоба Мда, как всегда, получил свое, и в лес... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться