Jump to content

    

pokk

Участник
  • Content Count

    132
  • Joined

  • Last visited

Community Reputation

0 Обычный

About pokk

  • Rank
    Частый гость

Recent Profile Visitors

1922 profile views
  1. Подскажите, как бороться с болтанием параметра на индикаторе, т.е было значение 5.00 через секунду 4.99 потом опять 5.00... 4.99,5.01 При этом сам сигнал "почти" постоянный, разве что под действием температуры может уплывать. Интегрирование значений АЦП параметра присутствует(1000 изерений). Пока из решений вижу снять цифровой сигнал(значения АЦП) построить спектр(найти частоту среза) и посчитать цифровой фильтр. Есть ещё какие либо решения?
  2. Исключение секции сделал так: Настройки присутствуют в файле const S_flash_GlobalSettingAllVar Flash_default_Settings@".FlashDefault"=.... Настройки отсутствуют в файле __no_init S_flash_GlobalSettingAllVar Flash_default_Settings@".FlashDefault"; Дальше хотел сделать разные конфигурации проекта, и запускать тот или другой вариант, но это оказывается не очень удобно, так как при измени одной конфигурации приходиться изменять и другую. Как это можно сделть по другому ? Вообще мне надо 2 hex файла один который содержит настройки, и второй без секции настроек. (хотел последовательно запускать iarbuild.exe с разной конфигурацией,но до этого пока не дошел)
  3. Из за чего меньше стираний секторов? Из за того что они изначально могут быть стертыми (при увеличени прошивки)? А по поводу склейки строки hex из разных блоков, что можете посоветовать?
  4. О проверить на 0xFF, да можно, я просто всегда очищал при переходе от одного сектора к другому. Благодарю, я чуть не наворотил массив содержащий номера стертых секторов =). Это реализовано в протоколе TFTP, там к блоку данных крепиться шапка в которой указанно номер пакета с данными, а в ответ отправляешь номер следующего пакета данных, который надо принять. Но вопрос, на соединение строки hex из разных блоков все ещё остался =(.
  5. Я про это и имел ввиду что, во flash писать данными по 16 байтами, по адресу из вытащенному из данной строки, но как узнать что сектор по текущему адресу был стерт и его не надо повторно стрирать ? Я работаю через wiznet 5500, он принимает IP пакет, а из нечего по SPI я считываю сами данные UDP пакета, с помощью DMA. Ну дальше этот кусок разбираю посимвольно. Не в трафике дело, а в том что бы не перетирать, пустые страницы, тем самым быстрее файл запишется. Ну и проверка CRС на лету, при не валидности CRC строки, можно повторно запросить строку/блок.
  6. В таком варианте передаться много не нужных данных, в последнем секторе находятся настройки ПО, по этому до них заполняется все 0xFF и находиться в BIN файле. Увы передача идет по TFTP, оттуда и блоки по 512. Т.е её надо сразу записать во Flash, иначе не как? Как тогда определять был ли стерт сектор или нет,после записи пару строк?
  7. Наконец то появилось время что бы продолжить сборку проекта, расписал все что хотелось бы видеть в сборке получилось вот что: Включалась сборка HTML страницы (GULP) Включалась утилита конвертации страницы в массив (.exe) создавалась версия ПО (инкремент+ HSA1 комита) компиляция hex файл Копирование полученный файл в папку HEX с новым именем версии ПО Соединение Hex файл c Hex файлом BootloAder Создание временного файла hex файл с добавления серийного номера Половину уже сделал на скриптах python, только встал вопрос как это все запускать ? Сейчас пока сделал что большая часть запускается при Merge в релизную версию. Но кажется мне такой подход не совсем корректным. Как это все сконфигурировать нормально ? В одних проекта некоторые шаги не нужны,в других нужны. И как это сделать универсально что бы легко можно было перенести в новый проект.
  8. Решил доделать свой bootloader что бы он принимал прошивку в hex формате. Сам формат оказался достаточно простым, но при реализации столкнулся с некоторыми вопросами. Процессор у меня stm32f103, там размер страницы 1-2 Кбайт, по этому(для варианта записи bin файла) я сначала накапливал данные на запись по размеру страницы, а потом стирал страницу и записывал новые данные. Аналогично думаю сделать и для Hex файла. Получается такой алгоритм: Принять блок HEX данных 512 байт Конвертировать блок, скопировать в накапливающий буфер(или сразу туда конвертировать) Дождаться заполнения всего записывающего буфера. Записать буфер в Flash. Основная проблема с которой я столкнулся, это ситуация когда строка hex файла разбилась на два разных блока. Пока подумываю сделать проверку каждой строки на завершающие символы "\r\n", и если их не было значит данную строку надо скопировать, и как-то склеить со следующим буфером. Склеивать функцией strcat, как-то не очень нравиться 512 байт копировать =(. Как такое сделать правильнее ? Второй вопрос могут ли адреса смежных строк hex файл сильно отличаться (с одним типом '00' Data Record )? Полистав несколько hex файлов такого не заметил.
  9. А если ПО более простое где нету bootloader и прошивка идет через ST-Link Utilite как ему передать что бы он не стирал ?
  10. Да я тут хотел больше узнать как скрипт нормально организовать, в случае если надо вернуть тот серийный номер который уже был (до обновления ПО) и менять нечего не надо.
  11. Я уже думал в сторону, написание скрипта который модифицирует выходной hex файл добавляя в него серийный номер, но все же было интересно как это делается по уму. А в случае перепрошивки как быть, если в серийном номере есть инкремент ?
  12. Это как вместе "с первоначальной прошивкой"? Серийный номер входит в состав hex файла? Это для каждого устройства, заново hex файл компилировать ?
  13. Да блоки фиксированного размера, всегда пытался так делать, и вечно получал грабли, то чего то не хватает что ещё что нибудь, в данном случае, не получиться все принятые данные с несколько потоков объединить(хотя может это и не актуально).
  14. Да про spi Да Скорость у всех одинакова. Скорости SPI хватает с 3х кратным запасом что бы все принимать/передавать. Все верно Да, для того что бы по максимум нагрузить SPI и не дробить DMA на более мелкие посылки, решил объединить по максимум в одну большую посылку(все потоки, которые принялись), по этому и добавляю номер потока к данным.