-
- У ARM плоское адресное пространство, там нет "пространства
ввода-вывода" (ну, кроме фактического диапазона адресов). __IO -
это макрос для volatile в CMSIS. lloyd(245 знак., 11.09.2020 18:08)
- Т.е. это всё же не просто память, а с особым свойством, отмеченным
"__IO", и "композитное определение" - "указатель на слово в памяти
со свойством volatile"? - teap0t(11.09.2020 18:15)
- Для процессора - это именно что "просто память". У него нет
отдельной IO-шины (поэтому обработчики прерываний из RAM могут
работать медленнее, чем из FLASH, потому что для последнего есть
кеш у процессора). lloyd(268 знак., 11.09.2020 18:22)
- ОК - teap0t(11.09.2020 18:24)
- Для процессора - это именно что "просто память". У него нет
отдельной IO-шины (поэтому обработчики прерываний из RAM могут
работать медленнее, чем из FLASH, потому что для последнего есть
кеш у процессора). lloyd(268 знак., 11.09.2020 18:22)
- Т.е. это всё же не просто память, а с особым свойством, отмеченным
"__IO", и "композитное определение" - "указатель на слово в памяти
со свойством volatile"? - teap0t(11.09.2020 18:15)
- Неправильно. Всё неправильно. Компилятор это видит так: представь,
что CR_LCDEN_BB -- указатель на тип "_IO uint32_t" и по адресу,
куда указывает этот указатель (для чего нужна первая звёздочка)
запиши значение полученное путём преобразования NewState в тип
uint32_t... Ни про какие вводы-выводы компилятор ни сном ни духом.
У него нет таких абстракций. Настоятельно рекомендую "практику
программирования" опять же. - fk0(11.09.2020 18:06)
- Ну, я же говорю о "модификаторе", который сообщает компилятору, что
у памяти есть дополнительный атрибут, отличающий её от прочих
ячеек. Мы-то не компиляторы, нам можно синонимы употреблять. Книгу
читаю. - teap0t(11.09.2020 18:22)
- Вот какой-нибудь индусский говнокодер наковыряет из носа _IO, и
начинающий ымбеддер начинает искать там тайные смыслы. Надо было
написать volatile, и точка. - SciFi(11.09.2020 18:29)
- Я с начала написал: нужно учиться программировать абстрактный
компьютер, а не AVR на IAR, или ARM на Keil. Но вот эта мысль
почему-то встречает гигантское сопротивление. Абстрактный компьютер
не хотят. - fk0(11.09.2020 18:48)
- Может Кнута посоветовать. Он как раз сперва и говорит о абстрактной ЭВМ, а потом переходит к алгоритмам. - Xитpый Kитaeц(12.09.2020 12:16)
- Речь всё же не о каком-то чипе какой-то фирмы, а о вполне
абстрактной форме записи (__IO uint32_t *). Я, как человек в теме
свежий, естественно, интересуюсь на предмет детали "__IO" в записи.
В говорите, что она не нужна, но зачем-то же она там присутствует.
Должен я понять зачем или нет?! Абстракции вещь понятная, когда
понятА уже. Скажем, дифференциальное счисление штука абстрактная, но
становится откровенно понятнее и интереснее, если знать, как с
помощью teap0t(68 знак., 12.09.2020 09:43)
- #define __IO volatile il-2(103 знак., 12.09.2020 09:52)
- Включил листинг препроцессора и тутже узрел "*(volatile uint32_t *)
(((uint32_t)0x42000000) + ((((...." - teap0t(13.09.2020 12:03)
- И где вы только такие страшные слова откапываете :), С - предельно
простой язык. - Kceния(13.09.2020 15:34)
- Я вот тоже не понимаю - зачем сразу лезть в самые тёмные углы? Это
всё равно что увидев строчку printf("Hello, world\n"); смотреть
сорсы функции printf. Да там чёрт ногу сломит, многие этих сорсов в
глаза не видели, но прекрасно принтфом пользуются. Так и здесь -
напишите #include "stm32f10x.h", и без нужды внутрь не
заглядывайте. Зато вы сможете написать что-нибудь вроде
USART1->CR1 = USART_CR1_UE | USART_CR1_TE | USART_CR1_TCIE; и
нужные биты попадут в нужный регистр йцyкeн(1 знак., 13.09.2020 16:27)
- Я так не умею. Понятно, что надо доверять коду IAR или ST, но в
данном случае я получаю HardFault при полном отсутствии ошибок и
предупреждений. Плюс, попробовал попереключать опции компилятора, и
всё завертелось... - teap0t(13.09.2020 16:41)
- Так не начинайте с того, что не работает. Начните с того, что
работает, неужели такое нельзя найти? Я бы вам сам что-нибудь
подкинул, но я с L не работал, только с F. Ну там светодиодом
мигните, или пресловутые два байта переслать через UART. - йцyкeн(13.09.2020 17:38)
- Это проект из STM32L-Discovery_FW_Pack, который можно взять у ST,
но плата MB963B - старенькая с 152RBT (без "A"). На шабаше у
Компела давно тому всё работало. Сейчас компилирую - ошибок нет, но
получаю HF и всё. Про светодиод понятно, но интересно же в чём
дело. Я же не первый год программизмом занимаюсь, просто на Си этим
не страдал. Полностью перезалил проект - работает, хотя и не вполне
корректно. Я сам дурак. - teap0t(13.09.2020 19:18 - 20:20)
- в свое время, если склероз не изменяет fk0 подсказал быстрого выяснения места выпада в HF Aleksey_75(242 знак., 13.09.2020 19:23)
- Это проект из STM32L-Discovery_FW_Pack, который можно взять у ST,
но плата MB963B - старенькая с 152RBT (без "A"). На шабаше у
Компела давно тому всё работало. Сейчас компилирую - ошибок нет, но
получаю HF и всё. Про светодиод понятно, но интересно же в чём
дело. Я же не первый год программизмом занимаюсь, просто на Си этим
не страдал. Полностью перезалил проект - работает, хотя и не вполне
корректно. Я сам дурак. - teap0t(13.09.2020 19:18 - 20:20)
- Компилятор принципиально не может предупредить о некоторых вещах,
например об обращении к выключенной периферии. С таким подходом
можно загнать себя в угол. Есть конкретный проект, или "изучение
ради изучения"? - VLLV(13.09.2020 17:19)
- Спасибо за наводку. Удалил весь проект и установил из архива
заново. Работает, но температура -218 градусов. Приятно сознавать,
что сам дурак, а мир светел и прекрасен. - teap0t(13.09.2020 20:19)
- Народ, есть ли какой способ подключиться к плате отладчиком IAR?.
Плата живая и с прошивкой, не защищена (STM Discovery). Хочется
глянуть в память с заводскими значениями термодатчика и опорника на
предмет сохранения. - teap0t(15.09.2020 15:40)
- JLinkExe или JLink.exe VVB(233 знак., 15.09.2020 16:09)
- jlink.exe работать не хочет. Ладно позже вернусь к этому вопросу. teap0t(1 знак., 15.09.2020 16:25, картинка)
- Для сброса дампа flash нужно использовать j-flash - BlackMorda(15.09.2020 16:43)
- Проще через savebin (команда в JLink.exe). VVB(53 знак., 15.09.2020 17:43)
- Для сброса дампа flash нужно использовать j-flash - BlackMorda(15.09.2020 16:43)
- jlink.exe работать не хочет. Ладно позже вернусь к этому вопросу. teap0t(1 знак., 15.09.2020 16:25, картинка)
- в настройках отладчика включить подключение без ресета - Aleksey_75(15.09.2020 15:44)
- Пытался сделать так. Взял левый проект, скомпилял, установил отказ
от заливки и попытался запустить отладку. Шыш. Tue Sep 15, 2020
15:58:17: ELF/DWARF Error: Unknown teap0t(2 знак., 15.09.2020 16:05, картинка, картинка)
- На плате распаян огрызок ST-LINK/V2 у которого есть только SWD, а JTAG-а нет. ЫЫyкпy(654 знак., 15.09.2020 22:17, ссылка, ссылка)
- Нужно еще J-link/J-trace сконфигурировать. Выбрать JTAG/SWD,
Ethernet/USB - BlackMorda(15.09.2020 16:47)
- С USB он не хочет. И вообще у меня такого железа нет. У меня только ST-Link на демоплате. - teap0t(15.09.2020 20:34)
- Пытался сделать так. Взял левый проект, скомпилял, установил отказ
от заливки и попытался запустить отладку. Шыш. Tue Sep 15, 2020
15:58:17: ELF/DWARF Error: Unknown teap0t(2 знак., 15.09.2020 16:05, картинка, картинка)
- JLinkExe или JLink.exe VVB(233 знак., 15.09.2020 16:09)
- Народ, есть ли какой способ подключиться к плате отладчиком IAR?.
Плата живая и с прошивкой, не защищена (STM Discovery). Хочется
глянуть в память с заводскими значениями термодатчика и опорника на
предмет сохранения. - teap0t(15.09.2020 15:40)
- Спасибо за наводку. Удалил весь проект и установил из архива
заново. Работает, но температура -218 градусов. Приятно сознавать,
что сам дурак, а мир светел и прекрасен. - teap0t(13.09.2020 20:19)
- Так не начинайте с того, что не работает. Начните с того, что
работает, неужели такое нельзя найти? Я бы вам сам что-нибудь
подкинул, но я с L не работал, только с F. Ну там светодиодом
мигните, или пресловутые два байта переслать через UART. - йцyкeн(13.09.2020 17:38)
- Я так не умею. Понятно, что надо доверять коду IAR или ST, но в
данном случае я получаю HardFault при полном отсутствии ошибок и
предупреждений. Плюс, попробовал попереключать опции компилятора, и
всё завертелось... - teap0t(13.09.2020 16:41)
- Я вот тоже не понимаю - зачем сразу лезть в самые тёмные углы? Это
всё равно что увидев строчку printf("Hello, world\n"); смотреть
сорсы функции printf. Да там чёрт ногу сломит, многие этих сорсов в
глаза не видели, но прекрасно принтфом пользуются. Так и здесь -
напишите #include "stm32f10x.h", и без нужды внутрь не
заглядывайте. Зато вы сможете написать что-нибудь вроде
USART1->CR1 = USART_CR1_UE | USART_CR1_TE | USART_CR1_TCIE; и
нужные биты попадут в нужный регистр йцyкeн(1 знак., 13.09.2020 16:27)
- И где вы только такие страшные слова откапываете :), С - предельно
простой язык. - Kceния(13.09.2020 15:34)
- Включил листинг препроцессора и тутже узрел "*(volatile uint32_t *)
(((uint32_t)0x42000000) + ((((...." - teap0t(13.09.2020 12:03)
- #define __IO volatile il-2(103 знак., 12.09.2020 09:52)
- Я с начала написал: нужно учиться программировать абстрактный
компьютер, а не AVR на IAR, или ARM на Keil. Но вот эта мысль
почему-то встречает гигантское сопротивление. Абстрактный компьютер
не хотят. - fk0(11.09.2020 18:48)
- Вот какой-нибудь индусский говнокодер наковыряет из носа _IO, и
начинающий ымбеддер начинает искать там тайные смыслы. Надо было
написать volatile, и точка. - SciFi(11.09.2020 18:29)
- Ну, я же говорю о "модификаторе", который сообщает компилятору, что
у памяти есть дополнительный атрибут, отличающий её от прочих
ячеек. Мы-то не компиляторы, нам можно синонимы употреблять. Книгу
читаю. - teap0t(11.09.2020 18:22)
- Если бы CR_LCDEN_BB был указателем НУЖНОГО типа, то преобразование типа (__IO uint32_t *) не потребовалось бы. Скорее всего это просто константа - адрес. Чтобы по этому адресу записать 32-битное значение, необходимо преобразование типа - сказать компилятору, что это именно указатель и именно на 32-битное значение. - il-2(11.09.2020 18:05)
- У ARM плоское адресное пространство, там нет "пространства
ввода-вывода" (ну, кроме фактического диапазона адресов). __IO -
это макрос для volatile в CMSIS. lloyd(245 знак., 11.09.2020 18:08)