STM32 новичку в ARM что к чему
- Сообщения: 32
- Зарегистрирован: Вс ноя 13, 2016 18:04:13
Myp3ik, да хочу разобраться. Можно и по-народному, конечно. Но в чужом коде частенько попадаются подобные конструкции. Хотелось бы увереннее стоять на ногах. Название ветки и вопрос вроде соответствуют. Reflector, значит, если явно не указать sizeof(тип), то единица измерения адреса это байт и не зависит от размерности выражения, тоесть если к адресу 32 битного регистра прибавить 1, адрес сместится на байт, если к адресу 16 битного прибавить 1. то смещение будет тоже 1 байт. Я ожидал смещение адреса согласно размерности регистра. Что не логично.
- Реклама
Если к _адресу_ прибавить единицу, указатель сместится именно на то количество байт, которое занимает тип данных, на которые указатель, собственно, указывает. На 1 байт - частный случай для char и т.п. однобайтных символов.
А Reflector на ошибку правильно указал. Единицу-то Вы прибавляете не к указтелю, а к обычному uint32_t числу.
А Reflector на ошибку правильно указал. Единицу-то Вы прибавляете не к указтелю, а к обычному uint32_t числу.
- Сообщения: 32
- Зарегистрирован: Вс ноя 13, 2016 18:04:13
Как правильно написать? Мозги кипят. Изначально я отталкивался от справочника по С. Вот отрывок: "Операции адресной арифметики подчиняются следующим правилам. После выполнения операции
увеличения над указателем, данный указатель будет ссылаться на следующий объект своего
базового типа. После выполнения операции уменьшения— на предыдущий объект.
Применительно к указателям на char, операций адресной арифметики выполняются как обычные
арифметические операции, потому что длина объекта char всегда равна 1. Для всех указателей
адрес увеличивается или уменьшается на величину, равную размеру объекта того типа, на который
они указывают. Поэтому указатель всегда ссылается на объект с типом, тождественным базовому
типу указателя." Но потом запутался где-то.
увеличения над указателем, данный указатель будет ссылаться на следующий объект своего
базового типа. После выполнения операции уменьшения— на предыдущий объект.
Применительно к указателям на char, операций адресной арифметики выполняются как обычные
арифметические операции, потому что длина объекта char всегда равна 1. Для всех указателей
адрес увеличивается или уменьшается на величину, равную размеру объекта того типа, на который
они указывают. Поэтому указатель всегда ссылается на объект с типом, тождественным базовому
типу указателя." Но потом запутался где-то.
- Сообщения: 3604
- Зарегистрирован: Пн июл 28, 2008 22:12:01
Что мешает самому объявить как два uint16_t , и не насиловать мозг себе и окружающим?
- Сообщения: 6452
- Зарегистрирован: Пт сен 13, 2013 13:11:31
Вместе с кубом в новом дизайне появилась и утилитка для прошивки STM32 с незатейливым названием STM32CubeProgrammer. По сути, это бывший STM32 ST-LINK Utility, но в новом оперении.

Каких либо революционных новшеств я пока не увидел, но китайский ST-LINK V2 оно мне прошило до новой версии, чего от старой утилиты было не добиться.

Каких либо революционных новшеств я пока не увидел, но китайский ST-LINK V2 оно мне прошило до новой версии, чего от старой утилиты было не добиться.
- Реклама
- Сообщения: 3385
- Зарегистрирован: Пн окт 11, 2010 19:00:08
С STM32 ST-LINK Utility поставляется утилита ST-LinkUpgrade которая нормально обновляет китайские ст-линки.a5021 писал(а):китайский ST-LINK V2 оно мне прошило до новой версии, чего от старой утилиты было не добиться.
- Сообщения: 6452
- Зарегистрирован: Пт сен 13, 2013 13:11:31
- Сообщения: 3604
- Зарегистрирован: Пн июл 28, 2008 22:12:01
[uquote="AlDr70",url="/forum/viewtopic.php?p=3512293#p3512293"]После выполнения операции
увеличения над указателем, данный указатель будет ссылаться на следующий объект своего
базового типа. После выполнения операции уменьшения— на предыдущий объект.[/uquote]
Здесь имелись в виду операции инкремента/декремента указателя ++ и --
увеличения над указателем, данный указатель будет ссылаться на следующий объект своего
базового типа. После выполнения операции уменьшения— на предыдущий объект.[/uquote]
Здесь имелись в виду операции инкремента/декремента указателя ++ и --
Иван Сусанин - первый полупроводник 
не всегдаAlDr70 писал(а):длина объекта char всегда равна 1
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 3385
- Зарегистрирован: Пн окт 11, 2010 19:00:08
- Сообщения: 125
- Зарегистрирован: Вс мар 01, 2009 20:41:19
Кто терзал тач на STM32F746G-Discovery или ft5336 ft6x06 чипы регистр Gesture ID получалось заставить работать?
- Сообщения: 53
- Зарегистрирован: Вт янв 19, 2016 23:13:21
[uquote="AlDr70",url="/forum/viewtopic.php?p=3512140#p3512140"]да хочу разобраться. Можно и по-народному, конечно. Но в чужом коде частенько попадаются подобные конструкции. Хотелось бы увереннее стоять на ногах.[/uquote]Если действительно хотите разобраться в полете инженерной мысли типа #define i_Low (*(uint16_t *)((uint32_t)&(i))), разбейте его на маленькие части, упростите, и склейте упрощение части, и в результате ви получите (uint16_t)i(на конкретном примере). Или же используйте отладчик, и налету посмотрите значения переменних или карту памяти, и сразу все станет ясно и понятно как на картинке. Второй вопрос - если дошло до такого, то кто знает как он используется гдето там в коде.
PS: хороший пример того как простое чтение/запись переменной превратить в настоящий ад для человека, читающего этот код. Стоит ли использовать это дальше - однозначно да, особенно если нужно будет через пол года, год внести какието правки, и снова нужно будет потратить 2 часа времени, чтоб просто понять, что это делает
PS: хороший пример того как простое чтение/запись переменной превратить в настоящий ад для человека, читающего этот код. Стоит ли использовать это дальше - однозначно да, особенно если нужно будет через пол года, год внести какието правки, и снова нужно будет потратить 2 часа времени, чтоб просто понять, что это делает
- Вложения
-
- debug.png
- (61.73 КБ) 474 скачивания
- Сообщения: 32
- Зарегистрирован: Вс ноя 13, 2016 18:04:13
lazarev, я так и сделал. Разбил этот код на маленькие участки и разбирался с этим. Пока по другому никак. Нехорощо, конечно, когда столкнешься с плохо читаемым кодом. Отладка в железе пока мечта в слезах. Напаял светодиодов на выходе . Не получается и все тут. Много сайтов пересмотрел. Остается обновить STLink, но боюсь напортачить. Нечем будет и прошивать. Мой вопрос в целях учебы, ваши мнения все равно нужны. Практически, конечно, чем проще - тем надежней. За ответы всем спасибо. Есть сайты, где вообще могут тупо игнорировать человека если вопрос не понравился.
- Сообщения: 53
- Зарегистрирован: Вт янв 19, 2016 23:13:21
для st-link есть официальная утилита для обновления прошивки - STSW-LINK007, чтото нетак сделать там очень сложно(там 2 кнопки: проверить, обновить - последняя прошивка автоматом грузиться с офф. сайта).
Можно еще поексперементировать с отладкой с помощю официальной IDE AC6 SW4STM32, займет до 30мин. времени(включая скачивание, установку, запуск, создание нового проекта, нажатие кнопки Debug) + можно добавить Куб(гламурний инструмент для создания проектов, если вам нравится путь конфигурирования с помощью кнопочек/картиночек)
Можно еще поексперементировать с отладкой с помощю официальной IDE AC6 SW4STM32, займет до 30мин. времени(включая скачивание, установку, запуск, создание нового проекта, нажатие кнопки Debug) + можно добавить Куб(гламурний инструмент для создания проектов, если вам нравится путь конфигурирования с помощью кнопочек/картиночек)
- Сообщения: 32
- Зарегистрирован: Вс ноя 13, 2016 18:04:13
Я боюсь, что мой программатор слишком китайский. Он в красном корпусе, написано ST-LINK V2. Ниже STM8 & STM32. Внутрь не лазил. Не знаю какой там чип. Слышал, что некоторые после обновления не работают. Про такие и сказал слишком китайский. Залез внутрь, там 103CB. Скачал утилиту stsw-link007. Ну что, пробую?
- Сообщения: 3385
- Зарегистрирован: Пн окт 11, 2010 19:00:08
Нормально они обновляются. В случае чего МК можно также прошить через USART или USB в зависимости от его типа.AlDr70 писал(а):Я боюсь, что мой программатор слишком китайский.
Немного о обновлении прошивки. http://purebasic.mybb.ru/viewtopic.php?id=565
И об отладке. http://purebasic.mybb.ru/viewtopic.php?id=564
- Сообщения: 32
- Зарегистрирован: Вс ноя 13, 2016 18:04:13
- Сообщения: 3385
- Зарегистрирован: Пн окт 11, 2010 19:00:08
Что не получилось? Скачать или обновить прошивку?AlDr70 писал(а):Нет, не получилось stsw-link007
- Сообщения: 32
- Зарегистрирован: Вс ноя 13, 2016 18:04:13
Обновить не получилось. Теперь и STM32 ST-LINK Utility не видит прграмматор, я в ней прошивку заливал. Чего и боялся.


