eddy_em: (Костерок)
[personal profile] eddy_em
Уже полдня бьюсь с АЦП через ПДП. На стадии вывода значений возникают непонятные зависания. Что только не делал. И вдруг: бамц, озарение! Если убрать математические операции (деление, умножение, взятие остатка), никакого зависания нет. А как только я пытаюсь отобразить значение, вылезает ошибка.

То ли микроконтроллер дохлый, то ли какая-то хитрость есть в том, чтобы STM32F042 научить целочисленной арифметике кроме сложения и вычитания...

Date: 2017-01-15 03:07 pm (UTC)
From: [identity profile] alex-avr2.livejournal.com
Нечего пенять на микроконтроллер когда у самого говнокод!!!!

Date: 2017-01-15 04:22 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
При чем здесь говнокод, когда явно проблема в операции софтового деления?

Ищу нормальные алгоритмы.

Date: 2017-01-15 04:25 pm (UTC)
From: [identity profile] alex-avr2.livejournal.com
Нифига не явно.
Очень часто одно тянет другое очень косвенно.

Date: 2017-01-15 03:07 pm (UTC)
From: [identity profile] hrun-morjov.livejournal.com
не в китае купленный кирпич? Бо были разговоры, что они с заводов брак тащат с слабопрогнозируемыми глюками

Date: 2017-01-15 04:23 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Нет, честный "nucleo". Дорогущий, зараза!

Но я, конечно, не ожидал, что у cortex-M0 нет аппаратной операции целочисленного деления. Блин...

Date: 2017-01-15 04:39 pm (UTC)
From: [identity profile] electrodyssey.livejournal.com
Может переполнение где-нибудь, или похожая бяка?

Date: 2017-01-15 05:14 pm (UTC)
From: [identity profile] mbr.livejournal.com
Там не только софтового деления нет. Там всего-то два десятка инструкций оставили. Очень кастрированное ядро. Поэтому не удивляйся, что оно будет тормозить после F1.

Date: 2017-01-15 05:12 pm (UTC)
From: [identity profile] mbr.livejournal.com
у F0 софтовое деление. Оно крайне тормозное. Ты уверен, что бизнес-логика не ломается? Т.е. сначала набирать буфер в прерываниях/дма, а потом делать математику скопом в основном контексте?

Я сталкивался с багом софтового деления у фрискейла - при использовании операции деления в коротких прерываниях возможно undefined behaviour. Глянь в еррату, может есть что похожее.

Date: 2017-01-15 05:35 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Я нашел рабочий алгоритм деления с остатком, его и буду использовать, раз "готовое" не работает.

Для БТА я вообще не буду в код вставлять деление/умножение — буду пересылать калибровочные значения и "сырые" данные АЦП, а "апельсинка" пусть вычисляет.

Да уж, что-то не ожидал я, что ядро M0 настолько кастрированное. Даже STM8 со своими жуткими восьмибитными инструкциями мне такой заподлянки не выкручивал: sdcc нормально реализует софтовое деление для длинных чисел.

Скорее всего, здесь облом в opencm3. Нужно либо под себя все переделать, чтобы только заголовочные файлы использовать (а библиотеку брать от gcc), либо смириться. Выбираю второе.

Date: 2017-01-15 06:12 pm (UTC)
From: [identity profile] alex-avr2.livejournal.com
Интересно, почему у меня десятки прошивок под F0 с тысячами операций делений в совершенно разном контексте и никогда с этим проблем не было?
Уверен, что у тебя косяк не в как таковом делении, а в чем-то другом. И даже если ты его сейчас замаскируешь костылями - он с большой вероятностью потом все равно всплывет.

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

Date: 2017-01-15 06:52 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Дык, причина очевидна — старый opencm3. На новый переходить не собираюсь (смена API), а свое собственное еще долго клепать буду. Поэтому буду велосипеды костылями подпирать, а релизы вообще без деления делать.

Date: 2017-01-15 06:56 pm (UTC)
From: [identity profile] alex-avr2.livejournal.com
А при чем тут вообще opencm3 О_О
И нахрена оно нужно? Ты бы еще под SPL писал бы..

А пеняет еще на микроконтроллер...

Date: 2017-01-15 07:02 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
При том, что с нуля писать все дефайны я не собираюсь.

Date: 2017-01-15 07:13 pm (UTC)
From: [identity profile] alex-avr2.livejournal.com
А зачем писать все дефайны, если они все давно написаны в цмсисе?

Date: 2017-01-15 07:22 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Я не видел в цмсисе ничего, что позволит мне написать
DMA1_CCR5 |= DMA_CCR_MINC | DMA_CCR_TCIE | DMA_CCR_EN;

CMSIS - он только для всего семейства общее содержит, а уже конкретно для STM32 нужно где-то брать заголовки.

Date: 2017-01-15 07:31 pm (UTC)
From: [identity profile] alex-avr2.livejournal.com
Ты какую-то хрень пишешь.
Те дефайны что ты написал это и есть цмсис. к опенцм3 вообще никакого отношения не имеет.

http://www.keil.com/dd/docs/arm/st/stm32f0xx/stm32f0xx.h

Date: 2017-01-15 07:43 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Это — не cmsis, это инклюд от ST.
У меня в сниппетах такой есть в CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h. Но в нем мне не нравится, что описания регистров через структуры делаются. В opencm3 удобней.

Найти бы где готовый пример, чтобы проверить... Я те же сниппеты без мучений в течение 4-8 часов не соберу: там Makefile отсутствует. Поди-ка собери все, что там им нужно...

Где бы нормальный Makefile взять, чтобы скомпилировать примеры вообще безо всяких левых библиотек и стартап-файлов?

Date: 2017-01-15 07:47 pm (UTC)
From: [identity profile] alex-avr2.livejournal.com
Это — не cmsis, это инклюд от ST.
Тут ты формально прав, да, это надо было мне уточнить. Но так сложилось, что все давно это называют цмсисом и не парятся :)

>>не нравится, что описания регистров через структуры делаются

И в чем же плюсы такого? Структуры - наоборот удобно.

>>Makefile отсутствует.

а нефиг говносредами пользоваться.
Я вот одну кнопочку нажимаю и все готово.

Date: 2017-01-15 07:50 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
> Структуры - наоборот удобно.
Ну, учитывая то, что gcc в отличие от sdcc умеет оптимизировать, то действительно, все равно.

> а нефиг говносредами пользоваться.
Я как раз говносредами не пользуюсь. У меня IDE geany и компилятор gcc.

> Я вот одну кнопочку нажимаю и все готово.
Мне больше нравится видеть всю информацию в консоли, поэтому хоть и могу на хоткеи все повесить, лучше набрать make, посмотреть выхлоп, а затем уже make flash.

Date: 2017-01-15 07:53 pm (UTC)
From: [identity profile] alex-avr2.livejournal.com
А я нажимаю кнопочку тоже весь выхлоп вижу :)

Date: 2017-01-15 07:58 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Меня от мастдайки в частности и от проприетарщины вообще так воротит, что я лучше сменю сферу деятельности, чем буду в этом говне копаться!

Date: 2017-01-15 08:01 pm (UTC)
From: [identity profile] alex-avr2.livejournal.com
Ну тогда учачи с копанием в своем говне :)))

Date: 2017-01-15 08:38 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Попробую без opencm3 сделать blink и воткнуть туда деление. Если будет работать, так и буду продолжать.
Непонятно только, как туда usb и (в случае необходимости) lwip прикручивать: в opencm3-то все сделано единым массивом, никаких лишних движений не нужно делать.

Date: 2017-01-15 08:42 pm (UTC)
From: [identity profile] alex-avr2.livejournal.com
Удачи :)

С usb/ethernet/sdio (и может еще парой сложных блоков) - да, без готовых решений довольно заморочно вручную писать, это минус. Все остальное пишется влет на регистрах без заморочек.

Date: 2017-01-15 07:50 pm (UTC)
From: [identity profile] simsun.livejournal.com
О!
я тоже этот вот .h подпихиваю в GCC из cmd
из него уже stm32f030x6.h подставляется

Date: 2017-01-15 07:51 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Makefile'ом не поделишься?

Date: 2017-01-15 09:17 pm (UTC)
From: [identity profile] simsun.livejournal.com
ума не приложу что там можно полезного увидеть в моём исполнении, для одного файла наверно и скрипта хватило. Да ещё и для win,кстати, но мне не жалко :)))

ps не скажу, что помню откуда и для чего часть ключей GCC :)
-D STM32F030x4 - откуда то из прошлого там например

Date: 2017-01-15 09:23 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Да я вот думаю на F0 полностью на сниппеты перейти. А там ld-файлов нет, да и вообще как-то странно заковыряно.
Ладно, буду разбираться как-нибудь в другое время.

April 2025

S M T W T F S
  1 23 45
67 89101112
13141516171819
20212223242526
27282930   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 22nd, 2025 08:34 pm
Powered by Dreamwidth Studios