Перейти к содержанию
    

Waso

Свой
  • Постов

    303
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные Waso


  1. У меня основная программа закачивает обновление через изернет, рестартует и затем бут его переписывает на место проги. В будущем бут должен будет уметь закачать прошивку через UART, но... незнаю, может и придется реализовать это сейчас, но времени в обрез. А пока хочу попробовать воспользоваться опцией линкера "Raw binary image"... Как все получится - отпишу.

     

    ==============================================================

    Шить еще не пробовал (заменил FlashAT91SAM7Sx.d79 на ваш), но отладчик упорно начинает работать с нулевого адреса даже если ROMSTART=00100000. Какнибудь можно его научить учитывать ремап/неремап при запуске? А вообще линкует хорошо. Дописывает указанный в rawbinary image файл куда надо.

     

    Кстати, как отладчика заставить вставлять больше брейкпоинтов? В некоторых программах при отладке у меня получалось ставить одновременно не больше 2-3х брейков. А взялся за бут - так он мне вообще фигу показывает и даже пошагам смотреть может только на ассемблеровский код. Чтото гдето забыл я настроить. Раньше пользовался шаблонами...

  2. Почему линкер при линковке требует больше места чем ему требуется на самом деле?

    Смотрю 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 файлы.

    pack.zip

  3. Есть несколько непоняток по скрещиванию программы с бутлоадером.

    1. Если я ставлю линкеру например -DROMSTART=00008000 в программе, то размер выходного бинарника не меняется. Значит вначале файла идут вектора, а затем программа как и в обычном случае, но со смещенными переходами?

    2. Если я хочу прошить в чистый кристалл сразу и прогу и бутлодер, то как быть с векторами программы? Получается, нужно самому в этом случае создавать табличку векторов перед началом кода программы чтобы все это вместе вело себя также как и после перепрошивки проги бутом.

     

    Вобщем насчет реализации бута, ремапа и передачи управления от бута программе и наоборот я понял, а насчет первоначальной загрузки во флеш обоих и затем подготовки для отдельной загрузки чисто программы - неочень.

  4. Спасибо. Просто у меня после паскалевских Ctrl-Shift-K и -N (кажется) не рождается таких простых ассоциаций насчет таба. =)))

     

    Еще вопрос - можно ли в ИАР 4.40A при пользовании J-Link запускать отладку не прошивая кристалл? Тоесть прошил я один раз и отлаживаю. Смотрю по шагам прогу. День рабочий закончился или нечаянно вышел из дебаггера, если программу не менял - не хочется зря тратить ресурс флеша при новом запуске дебаггера...

  5. Видимо проблема в том что компилятор умничает и игнорирует директиву inline, и поскольку эти функции описаны внутри хедера (а не с-шного файла) то получается конфликт. Этот хедер писали сами атмеловцы и не предусмотрели почемуто отключение эвристики компилятора. Хотя они заботливо подменили через дефайн слово inline строкой __inline. Небольшое исправление этого дефайна устранило проблему:

     

    Было:

    #define __inline inline

     

    Стало:

    #define __inline _Pragma("inline = forced")

     

    ================================================

    Еще маленький вопросик - как в редакторе ИАР табом сдвинуть сразу несколько строк?

  6. Обнаружил что кудато подевалась L3. Причем ее явно намеренно удалили либо случайно(?) вырвали. Была посажена на клей. Тем не менее на VCCA откудато берется 2.6 вольта и микросхема работает.

    Вот разбираюсь в чем заключается эта багофича ибо я не первый пользую эту плату. Боюсь спалить ченить если просто верну на место катушечку...

     

    Фтыкаю за нее амперметр - кажет 20мА. Много это или мало? 3В * 20мА = 60мВт. Вроде немного. Надо рискнуть. :)

     

    На земле да и по питанию при подключении жы-линка появляются дополнительные тычки, но их есть и больше при работе программы без оного. А вообще амплитуда шумов составляет 80-100мВ что лично у меня не вызывает восторга... :(

     

    =================================================

    Исправил. Правда помогла не катушка, а впаивание в разрыв жытаговского ресета резистора 91 Ом. Без него с жытагом ресет поднимался не так высоко как без жытага. Процессору это не мешало, а вот у PHY DM9161A вызвало какието проблемы...

  7. Железка-то распространенная. Я просто поленился полное название написать - думал и так все ее знают. Это AT91SAM7X-EK. (см.рис.) Питается от усб порта тогоже компа, к которому подключен и житаг, такчто земля общая, но конечно могут быть какието проблемы на ней...

    sam7xek.gif

    Прицепил документацию по железке.

    at91sam7xek.pdf

  8. Зашиваю прогу через j-link (IAR). Пока не отключу джейлинковский шлейф - не видит сетку. Вернее, линк горит, а вот 100мбит и фул-дуплекс молчат. Но связи нет никакой. Ктонибудь сталкивался? Отладочная плата 7X-EK от STUDIEL.

  9. После отимизаций стека LwIP на STR912FA получил скорость TCP 5.6 метра в секунду :).
    Весьма интересно в чем заключались эти оптимизации. Хотябы в общих словах.

    Кстати у меня при попытке увеличить TCP_SND_BUF выше TCP_MSS сразу пропадала связь и на аки он отвечал ресетами. Неужели у at91sam7x256 ему памяти не хватает... А так скорость 300килоБАЙТ в секунду уверенно.

  10. Линкер выдает такую ошибку:

    Error[e27]: Entry "AT91F_ADC_CfgModeReg" in module BasicWEB ( ..\BasicWEB.r79 ) redefined in module SAM7_EMAC ( ..\SAM7_EMAC.r79 )

    В обоих указан инклюд, в котором находится конфликтующая ф-я. Причом она инлайновая.

    #include <lib_AT91SAM7X256.h>

    С АЦП я вообще не работаю. Охранные директивы в этом хедере есть. В чем проблема?

  11. Выкладываю портированный мною под ИАР TCP-IP стек LwIP из демо FreeRTOS для отладочной платы AT91SAM7X-EK. Он все еще выдает некоторое количество варнингов, но они связаны с выключенным дебагом. Работает web-сервер, отвечает на пинги. Перед прошивкой нужно задать айпишники в хедере sam7_emac.h. Версия lwIP - 1.1.0. Когда попытался прикрутить более новую - удивился как много оставлено для дописывания ручками в исходниках.

     

    Благодарю за помощь в освоении С и IAR местных гуру и особенно Сергей Борщ.

    lwIP4IAR.ZIP

  12. Благодарю.

    Начинает доходить. :)

     

    Значит любой с-файл включенный в проект будет компилироваться и отгрызать место даже если я закоментирую инклюд с его хедером??

     

    Насчет охранных директив и порядка следования я в курсе. Тем больше удивлялся когда повторное включение хедера с охранной директивой изменяло результат компиляции. Но теперь ясно.

     

    alexander55 отличная идея! На первый взгляд. Почему тогда такой прием широко не используется? Врядли для того чтобы сократить время компиляции.

  13. Насколько я понимаю, инклюд, обьявленный в начале файла должен быть виден во всех последующих инклюдах программы. Согласно Кернигану и Риччи, предпроцессор заменяет директиву #include на содержимое файла, на который она указывает. Однако в ИАРе для успешной компиляции некоторые инклюды приходится втыкать чуть ли не в каждый файл проекта. Плюс к тому, с-шные файлы вообще не участвуют в инклюдах, а обращение к их функциям происходит через прототипы функций одноименных хедеров. Нестыковочка.

     

    Подскажите пожалуйста, как можно избавиться от сабжевой проблемы, в чем могут быть ее причины? Общие ответы типа "в кривости кода" - не в счет.

     

     

    PS Пользую IAR EWARM 4.40A

  14. ... как в ИАРе быть с атрибутами naked ...
    Как быть с этой проблемой? Погуглил - нарыл волшебное слово __raw но видимо его знает только EWAVR. В реализации uIP для ИАР проблема решена реализацией прерывания на асме в отдельном файле. Этого хотелось бы избежать.
  15. смысл предыдущего перед вашим постом был в том что uIP тоже использует этот "левый" гэйтвей, только он там грамотно называется "default router", тоесть основной роутер или как это называется в винде - основной шлюз. Это адрес, на который посылаются пакеты, если IP места назначения не найден внутри вашей подсети.

  16. 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 ?? :wacko:

  17. Мне в AT91 нужно менять только одно слово во флеше. Обязательно ли для этого читать всю страницу, содержащую слово, менять его и записывать всю страницу обратно? Или можно канибудь проще? Мне не ради простоты а ради удлинения срока службы флеша... (реализую файловую систему. файлы будут больше читаться, писАться - редко, но тем не менее...)

  18. А где вы берете исходники? Ну захожу я на атымел.ком, ввожу в поиске AVR231 или AES bootloader и получаю ссылку на пдф и всякую лажу не по теме... внутри пдф только общие алгоритмы... Чисто по логике удается найти в нете ссылку по ключевым словам AVR231.zip но этоже не серьезно!

  19. Извиняюсь что лезу в чужую тему, но есть дилетантский вопрос по ней.

    Мне нужно обеспечить перепрошиваемость устройства (sam7x256) через ethernet. http и ftp сервера уже реализованы. Я планирую через ftp заливать (декриптовать находу) бинарник в свободную часть флеши и, после успешной проверки CRC, переписывать reset-вектор чтобы он указывал на начало этого бинарника.

     

    А бутлодер нужен, насколько я понимаю, чтобы переписывать прошивку поверх старой, и данные при этом брать из внешнего источника.

     

    Прав ли я и смогу ли я избежать танцев с бубном вокруг бутлодера?

  20. Кроме того, при малых скоростях вращения данная схема обратной связи (один импульс на оборот) становится неприменимой - нужно изменять структуру контура управления. Попробуйте промоделировать в симулинке с учетом близкой к реальности модели динамики и требуемых диапазонов регулирования.

    Есть ли смысл моделировать (искать и изучать программу) если у меня под рукой есть готовый макет (АРМ-овский Ев-борд и этот самый моторчик) ? Вообще у моторчика есть датчик выдающий 24 импульса за оборот, но по какимто причинам эти импульсы внутри одного оборота располагаются неравномерно. Да и при максимальной частоте вращения (4000) мне на 24 импульса скорости АРМа не хватит уже наверное (AT91SAM7X256). :(

  21. А если время квантования меняется? Мне нужно стабилизировать скорость вращения двигателя. Эту скорость я измеряю по времени между двумя импульсами, которые выдает датчик вращения по одному на каждый оборот. Этот импульс вызывает прерывание в котором по формулам ПИД расчитываются новые параметры ШИМа, управляющего двигателем. Впринципе работает нормально, но при резкой смене скорости возникает либо выброс (wind-up) либо установление идет слижком медленно - в зависимости от величины постоянной интегрирования. Вот я и думаю сделать ее зависимой от времени квантования, но не знаю какую формулу применить. Не подскажите?

  22. Вопрос - как сделать так чтобы клиент мог сам сменить прошивку через УСБ, не залазя внутрь и не замыкая ERASE? Подозреваю что самому надо писать лодыря. А нельзяли какнибудь применить встроенный??

     

    Master, огромное спасибо! Наконецто sam-prog работает как полагается. Мне наконецто удалось запустить ARM без иаровских костылей. :D

     

    Кстати, чтоб винда не ставила каждый раз при подключении шнура драйвер, нужно отключить в винде восстановление системы и автоматическое подключение к узлу windows-update.

×
×
  • Создать...