-
- Спасибо! Теперь смотрите, в чем проблема - такое приведение убивает
признак 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)