-
- stm32 сильно разные, например на L4 я пару часов потратил на бубен, там надо было не только DR приводить к одному байту, но еще периферию нетривиально настраивать. В других обходилось без бубна. - AVF(13.10.2020 12:48)
- Из даташита на STM32F10x: il-2(460 знак., 09.10.2020 15:29)
- Для F1 - не нужно, для F0 - можно и нужно. Совсем же недавно
обсуждалось, но повторенье, мать его! йцyкeн(477 знак., 09.10.2020 17:39)
- Спасибо, я про F0 был не в курсе - не пользовал на нем SPI. - il-2(09.10.2020 18:48)
- Для F1 - не нужно, для F0 - можно и нужно. Совсем же недавно
обсуждалось, но повторенье, мать его! йцyкeн(477 знак., 09.10.2020 17:39)
- При передаче всё просто. Само собой будет 1 байт. Если задан байт. А вот при приеме да, надо смотреть наличие ФИФО. Я 3 года назад накувыркался с STM32L476. :-) - Лaгyнoв(09.10.2020 08:38)
- Вот это читали? - teap0t(09.10.2020 07:56, ссылка)
- Спасибо! Теперь смотрите, в чем проблема - такое приведение убивает
признак volatile у DR! В IAR на максимальной оптимизации этот код
не работает. - VLLV(09.10.2020 09:00)
- Блин, да не выдумывайте проблемы на ровном месте. Всё проще пареной
репы. VladislavS.(452 знак., 09.10.2020 09:19)
- По поводу volatile эти примеры ничего не доказывают, т.к.
неизвестна оптимизация и прочие условия. По поводу размерности -
вот брошу все и сам проверю. - VLLV(09.10.2020 09:26)
- Чего? Вы видели определение регистров процессора в заголовочных
фалах? Там стоит __IO aka volatile. И ни один компилятор не имеет
права выкинуть/оптимизировать доступ к этим регистрам на любом
уровне оптимизации. Мои примеры скомпилированы на максимальной
оптимизации в IAR. Ну это же азы эмбеддерства, даже удивительно,
что такие вещи объяснять надо. - VladislavS.(09.10.2020 10:13)
- Имею интересные впечатления от компилятора cosmic для stm8. Он
просто не обращает внимания на volatile. Это логично, учитывая, что
код генерит на манер "что вижу, то и пишу", хитрых оптимизаций нет.
Но на код "var += 2;" выдаёт "INC mem INC mem", например. Зануды
скажут "какой же это volatile!", а я скажу "ну и что, зато код
компактный получается"... - SciFi(09.10.2020 10:26)
- И вдруг прерывание, в котором зачение проверяется на n или n+2... - s_h_e(09.10.2020 10:34)
- А за что настоящий ымбеддер свой хлеб ест? Опять же адуринщиков отпугивать хорошо. - SciFi(09.10.2020 10:58)
- И вдруг прерывание, в котором зачение проверяется на n или n+2... - s_h_e(09.10.2020 10:34)
- Наверно, Вы не знаете перевода volatile - "летучая", то она есть, то ее нет. В вашем случае есть, в моем - нет ;) - VLLV(09.10.2020 10:22)
- Имею интересные впечатления от компилятора cosmic для stm8. Он
просто не обращает внимания на volatile. Это логично, учитывая, что
код генерит на манер "что вижу, то и пишу", хитрых оптимизаций нет.
Но на код "var += 2;" выдаёт "INC mem INC mem", например. Зануды
скажут "какой же это volatile!", а я скажу "ну и что, зато код
компактный получается"... - SciFi(09.10.2020 10:26)
- Чего? Вы видели определение регистров процессора в заголовочных
фалах? Там стоит __IO aka volatile. И ни один компилятор не имеет
права выкинуть/оптимизировать доступ к этим регистрам на любом
уровне оптимизации. Мои примеры скомпилированы на максимальной
оптимизации в IAR. Ну это же азы эмбеддерства, даже удивительно,
что такие вещи объяснять надо. - VladislavS.(09.10.2020 10:13)
- По поводу volatile эти примеры ничего не доказывают, т.к.
неизвестна оптимизация и прочие условия. По поводу размерности -
вот брошу все и сам проверю. - VLLV(09.10.2020 09:26)
- Какой такой "этот код"? Прячете? Снова военная тайна? - SciFi(09.10.2020 09:05)
- Код по ссылке с приведением к байту *(uint8_t
*)&SPI_REGS[port]->DR = (uint8_t)data; - VLLV(09.10.2020 09:14)
- А, ну да. Надо же вот так: *(uint8_t volatile*)&SPI_REGS[port]->DR = (uint8_t)data; - SciFi(09.10.2020 09:27)
- Код по ссылке с приведением к байту *(uint8_t
*)&SPI_REGS[port]->DR = (uint8_t)data; - VLLV(09.10.2020 09:14)
- Блин, да не выдумывайте проблемы на ровном месте. Всё проще пареной
репы. VladislavS.(452 знак., 09.10.2020 09:19)
- Спасибо! Теперь смотрите, в чем проблема - такое приведение убивает
признак volatile у DR! В IAR на максимальной оптимизации этот код
не работает. - VLLV(09.10.2020 09:00)
- Это от контроллера зависит. Есть контроллеры с FIFO на SPI, у них есть разница в поведении при байтовом или пословном доступе к DR. Конкретно в RM на чип надо смотреть. - VladislavS.(09.10.2020 07:49)
- На сколько сконфигурирован, столько и передаст - il-2(09.10.2020 07:36)