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

esaulenka

Свой
  • Постов

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

  • Посещение

  • Победитель дней

    2

Весь контент esaulenka


  1. Расскажите пожалуйста, чем отличается очередь и семафор. Напомню (и это важно!) мы по прежнему про FreeRTOS, а не о сферическом коне, как тут принято.
  2. Cortex-M3 EFM32

    Адреса на скриншоте 0x8AXX. Конечно же, все всегда так делают - загрузчик ровно посредине флешки. Почему-то эти бессмысленные числа сами собой преобразовались в команды, а из тех сложились функции. Чудеса... Спасибо за мнение. Пожалуй, с Вами диалог можно прекращать. Бесплатный совет раз. Почитайте тему, почитайте другие сообщения авторов. Если 200$ за не очень простую работу - это "барыга-барыга", разговор можно сворачивать. Потому что без всякого шифрования может быть изрядный геморрой. Например, ключ хранится вместе с остальными 100500 настройками, доступ к нему через хитромудрый модуль чтения этих самых настроек. Или нажатия кнпок через 3 буфера прокидываются. Бесплатный совет два. Если денег нет, займитесь самообразованием. Вот недавно была статья "реверс для самых маленьких" https://habr.com/company/inforion/blog/412561/ с упором как раз в микроконтроллеры.
  3. Cortex-M3 EFM32

    Господа, вопрос не в тему. У нас тут технический форум, или бесплатный сеанс психоанализа (пациенты - HardEgor и топикстартер?). Чуть ближе к делу. Посчитайте, пожалуйста, какая вероятность найти там самомодифицирующийся код? Особенно с учётом того, что исходный бинарник не зашифрован и (видимо) более-менее свободно распространяется? В первом сообщении даже картинка IDA есть. И там видно, что а) IDA самостоятельно распознала почти весь (или вообще весь) код и б) программа довольно-таки линейная, высокой оптимизацией компилятора автор не пользовался. Но нет, мы будем сидеть на попе ровно и строчить послания "там может быть оооочень сложно, лучше за это не браться". Может. Но для этого надо поднять жопу и заняться анализом, причём не анализом кофейной гущи.
  4. Нет. Если задачи одного приоритета, они будут переключаться по кругу с периодом SYSTICK. Не самая лучшая идея, но работает. Заодно мы решили загадку топикстартера. Переключение задач у него не привязано к выполнению задачи никак, и в какой-то "счастливый" момент оно срабатывает посреди критической секции. Один раз. В общем, это никуда не годится. Если есть RTOS, надо ей пользоваться. Нужна задержка - delay() операционки. Нужно подождать, пока сработает прерывание - выкинуть вечный цикл с флажком, сделать очередь или семафор. Классика. Пастернака не читал, но осуждаю. Извините.
  5. Сообщения #11 и #15 в этом топике не читали? ладно, следующий раз постараюсь более внятно излагать свои мысли. Например, если задача 2 более высокоприоритетная, и устроена как-то следующим образом: while (1) { wait_mutex(); // queue/... do_job(); sleep(N); } а это внешний мьютекс или элемент из очереди привязан не к SysTick'у, а к какому-то внешнему воздействию, она может проснуться в т.ч. и в тот момент, когда задача 1 находится внутри критической секции. И всё - из sleep'а мы никогда не выйдем...
  6. Ну вот и включение/выключение прерываний в коде этой тачлиб надо перенести на таймер 3. NVIC_Enable() / NVIC_Disable(). ... а, по-хорошему, выкинуть их г-нокод задержек и переписать без критических секций.
  7. Файлик STMTouch_Driver_um.chm Раздел STM32L1xx resources used Из прерывания SysTick'а они вызывают TSL_tim_ProcessIT(). Должны, во всяком случае. И, видимо, как-то некорректно работают с // SysTick enable/disable interrupt macros #define enableInterrupts() {SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk;} #define disableInterrupts() {SysTick->CTRL &= ~SysTick_CTRL_TICKINT_Msk;} во всяком случае, каких-то других способов отключения таймера я сходу не нашёл. А вообще - покажите регистры SYSTICK'а после ошибки. Описание можно посмотреть на arm.com.
  8. А Вы, простите, сколько мостов спроектировали? Я Вам тоже открою секрет. Закон Ома открыт 192 года назад. Так что у нас тоже ничего принципиально не меняется второй век подряд.
  9. Работает, спасибо. Но правильное решение - это галка "Pre-run/Restart reset" на вкладке Startup. И почему я её столько времени не замечал...
  10. Аргументированно (с цитатами и толкованиями) - к сожалению, нет (не юрист совершенно). Но... Вот ещё человеческим языком: https://habr.com/post/80257/
  11. Сергей, я, видимо, невнятно написал. Прыжок на ResetHandler работает хорошо. А вот дальше без костыля в этом ResetHandler() asm volatile(" LDR r0, =_estack"); asm volatile(" MSR msp, r0"); ...отлаживаться неудобно... Собственно, вопрос: почему оно работало раньше и как это вернуть?
  12. То есть в даташите гадкие TI-шные инженеры спрятали figure 1 "SPI Slave Mode Timing Definition"? Или в reference manual'е не менее гадкие ST'шники убрали картинку "Data clock timing diagram" ? Сложнейшая задача "найди две картинки", не поспоришь...
  13. Здравствуйте, коллеги. Имеется win10, gnu arm eclipse (нынче gnu mcu eclipse), JLink, STM32F4xx В комплект gnu arm входят плагин для JLink'а и gdb. Всегда всё хорошо работало, но сейчас запускаю новый проект, и при запуске отладки указатель стека - нулевой. Где-то видел рекомендации "записывай руками pc и sp после старта отладчика". Запись pc так и работает (полностью автоматически, я ничего нигде не настраивал): Downloading 452 bytes @ address 0x08000000 - Verified OK ... Verifying flash [....................] Done. Writing register (PC = 0x080017b8) ... R0 = 00000000, R1 = 00000000, R2 = 00000000, R3 = 00000000 R4 = 00000000, R5 = 00000000, R6 = 00000000, R7 = 00000000 R8 = 00000000, R9 = 00000000, R10= 00000000, R11= 00000000 R12= 00000000, R13= 00000000, MSP= 00000000, PSP= 00000000 R14(LR) = 00000000, R15(PC) = 080017B8 Но sp автоматически не записывается (и в старом проекте тоже не записывался, всё корректно работало). В таблице векторов указатель наличествует: 8000000: f8 ff 01 20 b9 17 00 08 5d 17 00 08 5d 17 00 08 но, судя по "Writing register (PC = 0x080017b8)", процессор туда и не смотрит...
  14. У меня два предложения. 1) поменьше думать за оптимизатор. this, не this.. Пока не доказано, что оно заметно влияет на производительность, заморачиваться не стоит. 2) Давать членам класса (да вообще, всему!) осмысленные имена, чтобы было понятно, что это, и откуда. Сам пишу без всяких this->, и очень страдаю, когда пишу self.бла-бла() :-)
  15. Ну окей. Оператор, значит оператор. Да хоть господь бог. Вы, главное, в публичных местах это никому не говорите. Спор без конкретных примеров, без документации, с одними лишь баечками прекращаю.
  16. Ну что, современные технологии творят чудеса. То, что модем САМ ходит на сервер, совсем не отменяет тот факт, что "внутри" оно работает как и прежде - список станций, уровни сигнала, и никаких GPS'ов и там более RTK.
  17. Так всё дело в том, что я читал. И у меня для Вас плохие новости. Вышка отдаёт только свои идентификаторы. По команде "получить координаты" модем собирает список id-шников БС, дополняет его уровнем сигнала для каждой БС, и идёт на сервер гугла (или свой супер-точный-сервер, в случае ublox'а). А там с помощью волшебной магии и трилатерации вычисляются координаты модема. Точность всего этого действа - десятки метров в городе, километры "в полях".
  18. Aner, простите, координаты ЧЕГО вам дают опсосы?
  19. Я извиняюсь, уезжал в микро-командировку. static const uint8_t reg1[] = { 0, // TEMP_CFG_REG _L5376|_XYZen, // CTRL_REG1 _HPFoff, // CTRL_REG2 _I1_WTM, // CTRL_REG3 _BDU|_FS4G, // CTRL_REG4 _FIFO_EN, // CTRL_REG5 0, // CTRL_REG6 0, // REFERENCE }; WriteReg (TEMP_CFG_REG, reg1); static const uint8_t reg2[] = { 0, // INT1_THS 0, // INT1_DURATION 0, // CLICK_CFG }; WriteReg (INT1_THS, reg2); WriteReg (INT1_CFG, 0); WriteReg (FIFO_CTRL_REG, _FIFO_BYPASS); WriteReg (FIFO_CTRL_REG, _FIFO_STREAM|(Accel.GetFifoSize()/6-1));
  20. libopencm3 + stm32f4

    libopencm3 для АЦП не использовал, но... 1) Константа ADC_SMPR_SMP_3CYC выбрана осознанно? 2) (некритично, но некрасиво) enable NVIC лучше делать в конце, когда всё настроено. 3) флажок статуса EOC сбрасывается самостоятельно, после чтения data register
  21. У нас в изделии LIS3DH используется как датчик наклона/перемещения. Какого-то заметного "дребезга" не видно. По температуре заметно плывёт, да. Если интересно, могу содержимое регистров рассказать. Правда, коллега мой, который это всё делал, решил, что встроенный фильтр - дрянь, и сделал свой. Это показывать не буду, извините.
  22. Мысли на уровне ".опой чую": - передатчик 1, пакеты 1 и 4. Изменился 1 байт данных, изменились [1] и [3] байты КС. - передатчик 2, пакеты 1 и 3. Полностью аналогично. - все остальные варианты - КС меняется значительно. Имхо, Сергей Борщ прав - это какие-то костыли для совместимости, и две двухбайтовые КС одна в другой. И _pv прав, это не настоящий CRC / Флетчер / что-то продвинутое. Там от смены одного бита всё переворачиваться должно, а мы этого не видим. И да, если это две КС, может прокатить халява - одна из них не проверяется. "Испорченные" посылки пробовали?
  23. Господа, у меня вопрос, раз уж тут собрались специалисты по скриптовым языкам. Есть железка, есть программа на Qt (моего авторства). Они обмениваются пакетами, в Qt-шной программе есть класс "пакет". Для тестов регулярно приходится писать логику вида "если получили пакет А, а перед этим в пакете Б был флажок, то через 100 миллисекунд отправить пакет В". Сейчас оно написано на C++ и скомпилировано с основной Qt-шной программой, для выбора нужного теста банально вызывается нужная функция. Вопрос: как бы вынести этот функционал наружу в скрипты? QtScript пробовал, как-то криво оно связывается с плюсовой частью...
  24. STM32F407 и USB с BULK

    Прекрасный совет! Но там совершенно адский USB-стек. Мухи, котлеты активно замешаны с индусским рисом и карри в единое трудноделимое нечто. Отрывать от него лишнее и подсовывать своё очень неудобно. Я делал на основе LibOpenCM3 - пишем дескриптор (да, предварительно надо покурить USB in Nutshell), инициализируем нужные endpoint'ы - и всё, готово, можно обмениваться данными.
  25. Меня смущает. Меня смущает неспособность господина DASM прочитать слово "inductor" на схеме (оно там есть. и не один раз). Как и вывод "написано CCap (очевидно, от MLCC первые две буквы отвалились) - значит, студенты делали".
×
×
  • Создать...