-
Постов
303 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные Waso
-
-
Почему линкер при линковке требует больше места чем ему требуется на самом деле?
Смотрю map-файл или готовый бинарник, сгенеренный когда линкеру дается весь флеш и затем задаю это (даже немного большее) значение как ROMEND.
-DBOOTSIZE=00008000 //-DAPPMAXSIZE=00010000 -DAPPMAXSIZE=0000AB0F -DROMSTART=(00100000+BOOTSIZE) -DROMEND=(00100000+BOOTSIZE+APPMAXSIZE)
Тогда линковщик начинает ругаться:
Error[e16]: Segment DATA_C (size: 0x2e3c align: 0x2) is too long for segment definition. At least 0xc24 more bytes needed. The problem occurred while processing the segment placement command "-Z(CONST)INITTAB,DATA_ID,DATA_C=ROMSTART-ROMEND", where at the moment of placement the available memory ranges were "CODE:1108f6-112b0f" Reserved ranges relevant to this placement: 108000-1083a7 ICODE 1083a8-1108a5 CODE 1108a6-1108bf INITTAB 1108c0-112b0f DATA_ID
Если дать ему эти нехватающие 0xC24 байта, то линкуется нормально, но это выделенное пространство заполняет как пустое неиспользованное место.
Почему? На всяк случай приложил map и xcl файлы.
-
Есть несколько непоняток по скрещиванию программы с бутлоадером.
1. Если я ставлю линкеру например -DROMSTART=00008000 в программе, то размер выходного бинарника не меняется. Значит вначале файла идут вектора, а затем программа как и в обычном случае, но со смещенными переходами?
2. Если я хочу прошить в чистый кристалл сразу и прогу и бутлодер, то как быть с векторами программы? Получается, нужно самому в этом случае создавать табличку векторов перед началом кода программы чтобы все это вместе вело себя также как и после перепрошивки проги бутом.
Вобщем насчет реализации бута, ремапа и передачи управления от бута программе и наоборот я понял, а насчет первоначальной загрузки во флеш обоих и затем подготовки для отдельной загрузки чисто программы - неочень.
-
Спасибо. Просто у меня после паскалевских Ctrl-Shift-K и -N (кажется) не рождается таких простых ассоциаций насчет таба. =)))
Еще вопрос - можно ли в ИАР 4.40A при пользовании J-Link запускать отладку не прошивая кристалл? Тоесть прошил я один раз и отлаживаю. Смотрю по шагам прогу. День рабочий закончился или нечаянно вышел из дебаггера, если программу не менял - не хочется зря тратить ресурс флеша при новом запуске дебаггера...
-
Видимо проблема в том что компилятор умничает и игнорирует директиву inline, и поскольку эти функции описаны внутри хедера (а не с-шного файла) то получается конфликт. Этот хедер писали сами атмеловцы и не предусмотрели почемуто отключение эвристики компилятора. Хотя они заботливо подменили через дефайн слово inline строкой __inline. Небольшое исправление этого дефайна устранило проблему:
Было:
#define __inline inline
Стало:
#define __inline _Pragma("inline = forced")
================================================
Еще маленький вопросик - как в редакторе ИАР табом сдвинуть сразу несколько строк?
-
Обнаружил что кудато подевалась L3. Причем ее явно намеренно удалили либо случайно(?) вырвали. Была посажена на клей. Тем не менее на VCCA откудато берется 2.6 вольта и микросхема работает.
Вот разбираюсь в чем заключается эта багофича ибо я не первый пользую эту плату. Боюсь спалить ченить если просто верну на место катушечку...
Фтыкаю за нее амперметр - кажет 20мА. Много это или мало? 3В * 20мА = 60мВт. Вроде немного. Надо рискнуть. :)
На земле да и по питанию при подключении жы-линка появляются дополнительные тычки, но их есть и больше при работе программы без оного. А вообще амплитуда шумов составляет 80-100мВ что лично у меня не вызывает восторга... :(
=================================================
Исправил. Правда помогла не катушка, а впаивание в разрыв жытаговского ресета резистора 91 Ом. Без него с жытагом ресет поднимался не так высоко как без жытага. Процессору это не мешало, а вот у PHY DM9161A вызвало какието проблемы...
-
Железка-то распространенная. Я просто поленился полное название написать - думал и так все ее знают. Это AT91SAM7X-EK. (см.рис.) Питается от усб порта тогоже компа, к которому подключен и житаг, такчто земля общая, но конечно могут быть какието проблемы на ней...
Прицепил документацию по железке.
-
Зашиваю прогу через j-link (IAR). Пока не отключу джейлинковский шлейф - не видит сетку. Вернее, линк горит, а вот 100мбит и фул-дуплекс молчат. Но связи нет никакой. Ктонибудь сталкивался? Отладочная плата 7X-EK от STUDIEL.
-
Весьма интересно в чем заключались эти оптимизации. Хотябы в общих словах.После отимизаций стека LwIP на STR912FA получил скорость TCP 5.6 метра в секунду :).Кстати у меня при попытке увеличить TCP_SND_BUF выше TCP_MSS сразу пропадала связь и на аки он отвечал ресетами. Неужели у at91sam7x256 ему памяти не хватает... А так скорость 300килоБАЙТ в секунду уверенно.
-
Линкер выдает такую ошибку:
Error[e27]: Entry "AT91F_ADC_CfgModeReg" in module BasicWEB ( ..\BasicWEB.r79 ) redefined in module SAM7_EMAC ( ..\SAM7_EMAC.r79 )
В обоих указан инклюд, в котором находится конфликтующая ф-я. Причом она инлайновая.
#include <lib_AT91SAM7X256.h>
С АЦП я вообще не работаю. Охранные директивы в этом хедере есть. В чем проблема?
-
Выкладываю портированный мною под ИАР TCP-IP стек LwIP из демо FreeRTOS для отладочной платы AT91SAM7X-EK. Он все еще выдает некоторое количество варнингов, но они связаны с выключенным дебагом. Работает web-сервер, отвечает на пинги. Перед прошивкой нужно задать айпишники в хедере sam7_emac.h. Версия lwIP - 1.1.0. Когда попытался прикрутить более новую - удивился как много оставлено для дописывания ручками в исходниках.
Благодарю за помощь в освоении С и IAR местных гуру и особенно Сергей Борщ.
-
Благодарю.
Начинает доходить. :)
Значит любой с-файл включенный в проект будет компилироваться и отгрызать место даже если я закоментирую инклюд с его хедером??
Насчет охранных директив и порядка следования я в курсе. Тем больше удивлялся когда повторное включение хедера с охранной директивой изменяло результат компиляции. Но теперь ясно.
alexander55 отличная идея! На первый взгляд. Почему тогда такой прием широко не используется? Врядли для того чтобы сократить время компиляции.
-
Насколько я понимаю, инклюд, обьявленный в начале файла должен быть виден во всех последующих инклюдах программы. Согласно Кернигану и Риччи, предпроцессор заменяет директиву #include на содержимое файла, на который она указывает. Однако в ИАРе для успешной компиляции некоторые инклюды приходится втыкать чуть ли не в каждый файл проекта. Плюс к тому, с-шные файлы вообще не участвуют в инклюдах, а обращение к их функциям происходит через прототипы функций одноименных хедеров. Нестыковочка.
Подскажите пожалуйста, как можно избавиться от сабжевой проблемы, в чем могут быть ее причины? Общие ответы типа "в кривости кода" - не в счет.
PS Пользую IAR EWARM 4.40A
-
Как быть с этой проблемой? Погуглил - нарыл волшебное слово __raw но видимо его знает только EWAVR. В реализации uIP для ИАР проблема решена реализацией прерывания на асме в отдельном файле. Этого хотелось бы избежать.... как в ИАРе быть с атрибутами naked ... -
смысл предыдущего перед вашим постом был в том что uIP тоже использует этот "левый" гэйтвей, только он там грамотно называется "default router", тоесть основной роутер или как это называется в винде - основной шлюз. Это адрес, на который посылаются пакеты, если IP места назначения не найден внутри вашей подсети.
-
2 Сергей Борщ. Смысл понятен, но реализация в примере темновата.
volatile uint32_t* pTmp = (uint32_t*)((uint32_t)&Config_flash & ~0x7F);
uint32_t* pSegmentEnd = (uint32_t*)(((uint32_t)&Config_flash & ~0x7F) + 128);
while(pTmp < pSegmentEnd) // copy to shadow buffer
{
uint32_t Data = *pTmp;
*pTmp++ = Data;
}
Разве ~0x7F не равно 0x80 ? Каков смысл такой записи как у Вас?Тело цикла while тоже кажется избыточным моему неопытному глазу: Сначала присваиваем переменной Data то, на что указывает pTmp, затем, если я правильно понимаю работу постинкремента, сначала присваиваем тому на что указывает pTmp значение Data и после этого увеличиваем сам адрес указателя. Зачем кидать туда-сюда значение *pTmp ??
-
Мне в AT91 нужно менять только одно слово во флеше. Обязательно ли для этого читать всю страницу, содержащую слово, менять его и записывать всю страницу обратно? Или можно канибудь проще? Мне не ради простоты а ради удлинения срока службы флеша... (реализую файловую систему. файлы будут больше читаться, писАться - редко, но тем не менее...)
-
-
А где вы берете исходники? Ну захожу я на атымел.ком, ввожу в поиске AVR231 или AES bootloader и получаю ссылку на пдф и всякую лажу не по теме... внутри пдф только общие алгоритмы... Чисто по логике удается найти в нете ссылку по ключевым словам AVR231.zip но этоже не серьезно!
-
Извиняюсь что лезу в чужую тему, но есть дилетантский вопрос по ней.
Мне нужно обеспечить перепрошиваемость устройства (sam7x256) через ethernet. http и ftp сервера уже реализованы. Я планирую через ftp заливать (декриптовать находу) бинарник в свободную часть флеши и, после успешной проверки CRC, переписывать reset-вектор чтобы он указывал на начало этого бинарника.
А бутлодер нужен, насколько я понимаю, чтобы переписывать прошивку поверх старой, и данные при этом брать из внешнего источника.
Прав ли я и смогу ли я избежать танцев с бубном вокруг бутлодера?
-
Кроме того, при малых скоростях вращения данная схема обратной связи (один импульс на оборот) становится неприменимой - нужно изменять структуру контура управления. Попробуйте промоделировать в симулинке с учетом близкой к реальности модели динамики и требуемых диапазонов регулирования.
Есть ли смысл моделировать (искать и изучать программу) если у меня под рукой есть готовый макет (АРМ-овский Ев-борд и этот самый моторчик) ? Вообще у моторчика есть датчик выдающий 24 импульса за оборот, но по какимто причинам эти импульсы внутри одного оборота располагаются неравномерно. Да и при максимальной частоте вращения (4000) мне на 24 импульса скорости АРМа не хватит уже наверное (AT91SAM7X256). :(
-
А если время квантования меняется? Мне нужно стабилизировать скорость вращения двигателя. Эту скорость я измеряю по времени между двумя импульсами, которые выдает датчик вращения по одному на каждый оборот. Этот импульс вызывает прерывание в котором по формулам ПИД расчитываются новые параметры ШИМа, управляющего двигателем. Впринципе работает нормально, но при резкой смене скорости возникает либо выброс (wind-up) либо установление идет слижком медленно - в зависимости от величины постоянной интегрирования. Вот я и думаю сделать ее зависимой от времени квантования, но не знаю какую формулу применить. Не подскажите?
-
Точно! Вот ведь крутилось в голове! :D
-
Вопрос - как сделать так чтобы клиент мог сам сменить прошивку через УСБ, не залазя внутрь и не замыкая ERASE? Подозреваю что самому надо писать лодыря. А нельзяли какнибудь применить встроенный??
Master, огромное спасибо! Наконецто sam-prog работает как полагается. Мне наконецто удалось запустить ARM без иаровских костылей. :D
Кстати, чтоб винда не ставила каждый раз при подключении шнура драйвер, нужно отключить в винде восстановление системы и автоматическое подключение к узлу windows-update.
-
Сабж. Почему 0 не значит disable? Какое там еще может быть третье состояние? Или в чем преимущество, удобство этого? В часности, вопрос относится Атмеловским at91sam7.
sam256 remap
в ARM
Опубликовано · Пожаловаться
У меня основная программа закачивает обновление через изернет, рестартует и затем бут его переписывает на место проги. В будущем бут должен будет уметь закачать прошивку через UART, но... незнаю, может и придется реализовать это сейчас, но времени в обрез. А пока хочу попробовать воспользоваться опцией линкера "Raw binary image"... Как все получится - отпишу.
==============================================================
Шить еще не пробовал (заменил FlashAT91SAM7Sx.d79 на ваш), но отладчик упорно начинает работать с нулевого адреса даже если ROMSTART=00100000. Какнибудь можно его научить учитывать ремап/неремап при запуске? А вообще линкует хорошо. Дописывает указанный в rawbinary image файл куда надо.
Кстати, как отладчика заставить вставлять больше брейкпоинтов? В некоторых программах при отладке у меня получалось ставить одновременно не больше 2-3х брейков. А взялся за бут - так он мне вообще фигу показывает и даже пошагам смотреть может только на ассемблеровский код. Чтото гдето забыл я настроить. Раньше пользовался шаблонами...