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

oleghmt

Участник
  • Постов

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

  • Посещение

Репутация

0 Обычный

Информация о oleghmt

  • Звание
    Участник
    Участник
  1. Упс. Что-то от жары наверное, я соображать стал плохо. :-) Всё правильно: скопировал в память, сделал перезапуск, проверил в обработчике был ли перезапуск, если был - установил смещение, перешёл на вектор. Спасибо
  2. В своё время писалась прошивка устройства с использованием FreeRTOS для AT91SAM7X. Сейчас перехожу на SAM3S и заканчиваю переносить код. Возникла описаная в заголовке проблема. В предыдущем процесоре, я просто скопировал основной проект, выбросил всё лишнее оставив лишь взаимодействие по USB и несколько команд своего интерфейса чтобы принять новую прошивку и записать её. После этого компилировал код в SRAM, превращал в масив и вставлял в основную прошивку. Когда устройство получало команду изменить прошивку, этот масив банально копировался в ОЗУ и выполнялся переход на начало кода в SRAM, что автоматически запускало процесор в режиме загрузчика прошивки. В новом процесоре возникает проблема с векторами прерываний - нужно изменить VTOR регистр, но это можно делать только в privileged режиме, куда можно попасть только вызвав обработчик exception, если я правильно понимаю. Сначала у меня была идея, после копирования кода в память, выполнять програмный reset и в resetHandler'е анализировать - если перезапуск вызван програмно, тогда изменять VTOR и переходить на код в ОЗУ опять вызывая reset. Но, похоже, это неправильный путь, так как во время перезапуска регистр смещения векторов обнуляется. SVC использовать не хочу, так как, этот вектор уже задействован FreeRTOS и ставить в обработчик какие-то проверки и условные переходы не очень хочется. Пока есть только идея использовать Usage Fault Handler - при старте основной прошивки разрешить его, а после копирования в память загрузчика прошивки, обратиться по невыравненному адресу (или вызвать деление на ноль). А в обработчике установить регистр смещения векторов и в асемблерной вставке выполнить команду перехода на ResetHandler в ОЗУ. Правильны ли мои намерения? Может есть какой-то другой путь? Хочется сделать, с одной стороны, попроще, а с другой - красиво и "правильно". :-) Ещё добавлю, что код для SAM3S пишу используя последнюю Аtmel Studio
  3. увы, не доглядели. Теперь будем знать. Спасибо за помощь
  4. Решили проблему кардинально :-) Связались с поставщиками процесора или с представительством Atmel (точно не знаю). Они порекомендовали поставить вместо 18.432, кварц на 12 МГц. самба 2.10 увидела процесор. Позже ещё попробую 2.11
  5. понятно, попробую сегодня вечером на другой машине. Возможно всё потому, что на Win7 ставлю
  6. А как в 2.10 выбирать не CDC? Установил, при установке вроде-бы не было никакой возможности выбора, в папке только один sam-ba_cdc.exe, в папке drv - inf для cdc. Тыкните, пожалуйста, носом :-)
  7. И у меня вопрос по тому же поводу. Сколько смог перерыл интернет и форум, пока ничего решающего мою проблему не нашёл. Ближе к делу: 1. Разрабатывалось устройство на базе AT91SAM7X256. Для общих сведений - код писался с помощью CrossWorks 1.6 - 1.7, кварц 18.432, первая запись прошивки с помощью Sam-ba 1.11 через USB, обновления опять же через USB но уже своими програмами, своим прошивальщиком. 2. В процесе развития проекта решили перейти на AT91SAM3S4. Сделали железо, изменил програму в CrossWorks (пришлось поставить 2.1), скачал новую самбу 2.11, установил всё по инструкции (драйвера, подключение), пробую подсоединится - та же ситуация: при выборе no board самба подключается, даже можно посмотреть что твориться в памяти по различным адресам, а вот закладки записать во флеш нету, при выборе же в списке устройств at91sam3s4-ek - нажимаешь connect, исчезает окно, но GUI не появляется, samba висит в процесах. 3. Нашёл самбу 2.10 - ничего не изменилось. В самбе 2.9 - нет 3s процесора, только 3u. Пробовал на двух нотбуках с intel чипсетами и процесорами WinXP Win7, на стационарном компе AMD - ситуация одинаковая. Пробовал на самбе 2.11 подключиться к предыдущей версии устройства с SAM7X - всё работает нормально, отображается, прошивается. Соответсвенно вопрос - куда можно копать? 1. Не разбирался пока - если GUI не работает, можно ли работать через командную строку, сложно ли? Может можно где-то в скриптах что-то посмотреть-поправить, передачу данных по USB помониторить? 2. Возможно (хотя не верится), проблема в том, что изменилось подключение USB - убрали линию контроля наличия питания от хоста, на другую ножку перенесли ручное управление USB_PUP. 3. В принципе, возможны проблемы в железе - может и оно изначально не запускаться, хотя, если в режиме no board самба подключается и можно полазить по памяти, то напрашивается вывод, что тут всё нормально. Куда ещё можно посмотреть?
  8. Здравствуйте Посоветуйте, пожалуйста, как можно исправить такую ситуацию. В своё время, разрабатывалось устройство на базе AT91SAM7X, которое, помимо всего прочего, управлялось с компьютера через USB с использованием виртуального COM-порта на базе драйвера usbser.sys. В качестве основы при этом был использован пример из FreeRTOS. Устройство нормально заработало, в связи с выходом SP3 появились проблемы - неработоспособность даной конфигурации. Более-менее просмотрев интернет в поиске решения проблемы минимальными средствами, увидел предложения отказываться от использования usbser.sys или заменять его файлом из дистрибутива WinXPSP2. С первым вариантом не очень хочется связываться, так как времени для написания собственного драйвера (а, в основом, для изучения как это делать) особенно нету. В другом варианте недостаток - виндовс, по словам пользователей устройства, иногда не даёт заменить драйвер возвращая старый на место. Да и непонятно, как отобъётся замена файла более старым на работоспособность других частей виндовс. Я попробовал переименовать старый usbser.sys, подправить inf всюду где встречается его название и скормить его через update drivers. На моей системе (WinXPSP2) - этот вариант прошёл без проблем, но на некоторых системах (и SP2, и SP3) Windows не хочет производить замену выдавая при установке "нового" переименованного драйвера - "The name is already in use as either a service name or a service display name". Есть ли какие-то другие решения проблемы? Спасибо
  9. Ну и темку же я поднял :) Поделюсь результатами которые я успел получить. Разбирался, немного, с IwIP по примеру из FreeRTOS, тут пока, что грустно - стек хочет больше килобайт на 10-15 чем в примере с uIP, а я могу максимум 2кБ выделить. Сильно глубоко в дебри стека я пока не забрался, так что возможно в будущем что-то и выплывет. Зато в моём коде начал играться с компиляцией отдельных файлов в ARM или Thumb. Так вот, когда-то я поставил весь стек (uIP) в ARM, а теперь, когда изменил на Thumb, у меня скорость передачи моих данных по сети возросла на треть. Ещё сегодня попробую забрать копирование с буферов EMAC в буфер стека, а поставлю просто обмен указателями, тоже что-то подростёт, а дальше буду пробовать в стеке выбрасывать лишние вещи. На счёт обмена указателями, я думаю сделать так: как только пришёл пакет в EMAC буфера, все их пометить как использованые, поменять местами указатели и тогда обрабатывать данные, что-бы не нужно было делать менеджер памяти с переходом между отдельными 128 байтными кусками. Посмотрим, что выйдет В данном проекте изменить процесор уже нельзя, да и без оси писать будет тяжело - много дополнительных задач, которые работают паралельно
  10. Насколько я смог разобраться когда-то и вспомнить сейчас, во FreeRTOS, работа с очередями организована через усыпление всех активных задач, что, соответственно, сказывалось на быстродействии системы. Поэтому пришлось переделывать. Сейчас посмотрю что изменилось в новой версии операционки и как это всё сделано в интересующем меня примере.
  11. Понятно, тогда вопрос со стороны lwIP - можно ли использовать для моей задачи пример использования стека из FreeRTOS? Первоначальное знакомство с примером показало, что в нём используются очереди, а в предыдущей версии ОС, когда я разбирался с обменом данными по USB, используя пример из FreeRTOS, то как раз очереди очень сильно тормозили обмен. И только когда я заменил их на обычные масивы - тогда смог выйти на расчётные скорости обмена данными.
  12. Писать свой менеджер памяти, пока для меня будет сложно, поэтому разбираюсь с lwIP. Правда ещё попробую копировать по 4 байта. А пока такой вопрос - прошивка у меня компилируется в Thumb виде, согласно документации - использование ARM команд повышает быстродействие по сравнению с Thumb режимом. Пока что, при компиляции в ARM у меня система перестаёт работать - запускается нормально, но при попытке объявить (или запустить, ещё не разобрался) какую-либо задачу (использую FreeRTOS) - виснет. Соответсвенно вопрос - стоит ли этим баловаться (в смысле компиляцией в ARM) и в чём может быть проблема, что у меня подвисает система (может я не учёл что-либо общеизвестное)?
  13. думаю раза в 2 подойдёт (5-6Мбит/с). Попробую выбросить копирование данных и сделаю всё на обмене указателями, а дальше будет видно по результатам
  14. Очень хороша идея. Главное, что сам похожие вещи делал, при чём в этом же проекте, а тут использовать не догадался. Попробую :)
  15. TCP У меня там и моргание, и паралельные задачи, и обработка прерываний по таймеру где-то под 30кГц
×
×
  • Создать...