[an error occurred while processing this directive]
IAR C v2.27: контроль использованной памяти данных (SRAM)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Engine 23 октября 2002 г. 12:30

используется кристалл AT90S4433, у него 256 байт ОЗУ.
Пишется прога, довольная простоя, зашивется и всё работает. В какой-то момент компилятор выдаёт ошибку:
Error[e16]: Segment CSTACK (size: 0x40 align: 0) is too long for segment definition. At least 0x4 more bytes needed. The problem occurred while processing the segment placement command "-Z(DATA)CSTACK+_..X_CSTACK_SIZE=60-df", where at the moment of placement the available memory ranges were "a4-df"

Естественно меняю df на e3, и компилятор ругаться перестаёт. Однако в работе устройства возникает глюк. После долгого анализа, 4 байтовыу переменные делаю 2-х байтовыми (просто уменьшаются задержки) и всё начинает работать самым замечательным образом.
Тогда получается: в моей программе внешние переменные занимают 31 байт 0xDF=225dec. И всё нормально. Как только я 3-ём переменным увеличиваю размер до 4-х байт у меня получается, что стек данных (CSTACK) иногда залазит и портит мои внешние переменные. Выходит так?
Тогда почему компилятор это не отслеживает? Да и поскольку компиляторм никогда особого доверия нет, всегда хочет проверить "вручную"...
Вот здесь у меня возникают вопросы.
В *.map файле в самом конце указывается в моём случае
2 938 bytes of CODE memory (4 range fill) - занято памяти программ
158 bytes of DATA memory - так понимаю занято памяти данных. Почему 158? 31 байт переменных. Если учесть 100 байт регистров=I/O + 32 быстрых регистра, то всё равно не сходится.
И второй вопрос, в файлах листинга проекта указывается, например
228 bytes of CODE memory
0 bytes of DATA memory (+ 4 bytes shared)
что значит "+ 4 bytes shared"...

Заранее спасибо!

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru