STM32 новичку в ARM что к чему

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Это не хвост, это антенна
Сообщения: 1337
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Сообщение tonyk »

[uquote="oleg110592",url="/forum/viewtopic.php?p=3883815#p3883815"][uquote="tonyk",url="/forum/viewtopic.php?p=3883785#p3883785"]Раньше пользовался at()[/uquote]
может так (без правки скрипта линкера):

Код: Выделить всё

#define FLASH_PAGE_SIZE         ((uint32_t)0x00000400)   /* FLASH Page Size */
#define FLASH_USER_START_ADDR   ((uint32_t)0x08002000)   /* Start @ of user
......
   FlashErase(FLASH_USER_START_ADDR);
    CheckFlashErase(FLASH_USER_START_ADDR);
    FlashWord16Prog(FLASH_USER_START_ADDR, (uint16_t)DATA_TO_PROG);
    FlashWord16Prog(FLASH_USER_START_ADDR + 2, (uint16_t)(DATA_TO_PROG >> 16));
    
    /* Check the programming of the address */
    if  ((*(uint32_t *)(FLASH_USER_START_ADDR)) != DATA_TO_PROG)
    {
      error |= ERROR_PROG;
    }
из Example Code snippets covering STM32 F0 series
https://www.st.com/en/embedded-software ... etsf0.html[/uquote]
Я не вижу способа как внутрь секции с кодом втиснуть мой массив.
Вот в чём дело-то. Как линкёр зарезервирует место под мой массив? Причём внутри секции.

Добавлено after 2 minutes 42 seconds:
у меня на гитхабе в stm32samples есть пример: я там выделил во флеше 1 блок для хранения настроек
Их там много. Ткни пальцем в нужный.

Добавлено after 18 minutes 40 seconds:

Код: Выделить всё

.myvars :
  {
    . = ALIGN(1024);
    __varsstart = ABSOLUTE(.);
    KEEP(*(.myvars));
  } > rom 
Нашёл. Благодарю! Щас обмозгую.

Добавлено after 6 minutes 6 seconds:
Хм, 1К зарезервировано, это понятно как. А как их разаместить с нужного адреса? Такого в примере нет.
Ещё уточнения:
а) как все уже, наверно, догадались, это нужно для возможности записи моих данных во флэш;
б) у STM32F746 размер страниц флэш разный, мне нужны две штуки по 32К, а не одна на 128К, поэтому и нужно положить секцию по конкретным адресам.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

[uquote="tonyk",url="/forum/viewtopic.php?p=3883818#p3883818"]Причём внутри секции.[/uquote]
просто интересно - почему массив снаружи секции не подходит?
Реклама
Это не хвост, это антенна
Сообщения: 1337
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Сообщение tonyk »

[uquote="oleg110592",url="/forum/viewtopic.php?p=3883831#p3883831"][uquote="tonyk",url="/forum/viewtopic.php?p=3883818#p3883818"]Причём внутри секции.[/uquote]
просто интересно - почему массив снаружи секции не подходит?[/uquote]
Вложения
Screenshot_246.jpg
(62.08 КБ) 225 скачиваний
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку

Сообщение Zhuk72 »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3883781#p3883781"][uquote="Zhuk72",url="/forum/viewtopic.php?p=3883767#p3883767"]Можете через typedef определить эти уинты.[/uquote]В нескольких местах определять типа, да ещё переопределяя стандартные - грубая ошибка![/uquote]
Были бы они такие прямо стандартные, не приходилось бы подключать отдельным хедером. А так был вопрос про вариант - ну, вот он вариант. Правильный или нет - другое дело. Гораздо проще было в исходниках сменить все uint... на unsigned... - минутное дело - чем выискивать вариант с подключением дополнительных заголовков.
У меня тоже в каких-то компиляторах уинты изначально работают, в каких-то нет. Но я по привычке использую только unsigned char и пр., хотя это и длиннее.
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

[uquote="tonyk",url="/forum/viewtopic.php?p=3883834#p3883834"]А как их разаместить с нужного адреса?[/uquote]
тут быть может
https://stackoverflow.com/questions/408 ... r-commands
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18782
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

tonyk писал(а):Я не вижу способа как внутрь секции с кодом втиснуть мой массив
дык...

Код: Выделить всё

int my_array[1024] __attribute__((section(MY_SECTION_NAME))) = {1,2,3,4,5,6,7, ...};
а в командной строке потом добавляете параметр -Wl,--section-start=MY_SECTION_NAME=0x802000
вот и будет массив в нужной секции, а секция по нужному адресу...

или в ARM-GCC все не так?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 6572
Зарегистрирован: Сб янв 28, 2006 22:47:24

Сообщение Asmodey »

[uquote="Zhuk72",url="/forum/viewtopic.php?p=3883844#p3883844"]Гораздо проще было в исходниках сменить все uint... на unsigned[/uquote]
Каких-то нехороших последствий не последует? Просто заменить и все?
Астролябия-сама меряет, было бы что мерять!!!
Это не хвост, это антенна
Сообщения: 1337
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Сообщение tonyk »

[uquote="ARV",url="/forum/viewtopic.php?p=3883856#p3883856"]
tonyk писал(а):Я не вижу способа как внутрь секции с кодом втиснуть мой массив
дык...

Код: Выделить всё

int my_array[1024] __attribute__((section(MY_SECTION_NAME))) = {1,2,3,4,5,6,7, ...};
а в командной строке потом добавляете параметр -Wl,--section-start=MY_SECTION_NAME=0x802000
вот и будет массив в нужной секции, а секция по нужному адресу...

или в ARM-GCC все не так?[/uquote]
Блин, ну посмотрите же на картинку!
Вложения
Screenshot_246.jpg
(62.08 КБ) 210 скачиваний
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку

Сообщение Zhuk72 »

[uquote="Asmodey",url="/forum/viewtopic.php?p=3883858#p3883858"][uquote="Zhuk72",url="/forum/viewtopic.php?p=3883844#p3883844"]Гораздо проще было в исходниках сменить все uint... на unsigned[/uquote]
Каких-то нехороших последствий не последует? Просто заменить и все?[/uquote]
uint8_t = unsigned char
uint16_t = unsigned int
uint32_t = unsigned long
Левые без u будут signed.

Во всяком случае в Keil и Мплаб 8, 16 и 32-битные данным соответствуют именно char, int и long. IAR не использую, но скорее всего там так же будет.
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

Я бы сказал, что скорее
uint16_t = unsigned short
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18782
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

tonyk писал(а):посмотрите же на картинку!
во-первых, картинку вставлять по-человечески надо, а во-вторых, что я там должен увидеть? адрес, который вам нужен, вы можете сами написать правильный в командной строке. или в чем дело-то?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Это не хвост, это антенна
Сообщения: 1337
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Сообщение tonyk »

картинку вставлять по-человечески надо
Какой тут редактор, так и вставляется.
или в чем дело-то?
В перекрытии адресов. Я ведь спрашивал, как внутри секции с кодом разместить массив? Ручная привязка файлов к секциям- не вариант, ибо файлов много. На картинке показано почему и зачем это нужно.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18782
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

Мой уютный бложик... заходите!
Контактная информация:
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку

Сообщение Zhuk72 »

[uquote="WiseLord",url="/forum/viewtopic.php?p=3883875#p3883875"]Я бы сказал, что скорее
uint16_t = unsigned short[/uquote]
Сейчас уточнил. Keil Cx51 компилятор и Microchip XC8 short и int оба считают 16-битным типом.
А вот Keil ARM сказал, что int - это 32 бита. Я это и раньше читал, но как-то упустил.

Буду иметь в виду.
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 6572
Зарегистрирован: Сб янв 28, 2006 22:47:24

Сообщение Asmodey »

[uquote="Zhuk72",url="/forum/viewtopic.php?p=3883872#p3883872"][uquote="Asmodey",url="/forum/viewtopic.php?p=3883858#p3883858"][uquote="Zhuk72",url="/forum/viewtopic.php?p=3883844#p3883844"]Гораздо проще было в исходниках сменить все uint... на unsigned[/uquote]
Каких-то нехороших последствий не последует? Просто заменить и все?[/uquote]
uint8_t = unsigned char
uint16_t = unsigned int
uint32_t = unsigned long
Левые без u будут signed.

Во всяком случае в Keil и Мплаб 8, 16 и 32-битные данным соответствуют именно char, int и long. IAR не использую, но скорее всего там так же будет.[/uquote]
Спасибо, работает. И после MPLAB мне так удобнее :) Лишний библиотечный файл не нужно подключать.
Астролябия-сама меряет, было бы что мерять!!!
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="Zhuk72",url="/forum/viewtopic.php?p=3883844#p3883844"]Были бы они такие прямо стандартные, не приходилось бы подключать отдельным хедером.[/uquote]Эти типы введены в стандарт C99, то есть, больше 20 лет назад! Вылезаем из танка!

[uquote="Zhuk72",url="/forum/viewtopic.php?p=3883844#p3883844"]А так был вопрос про вариант - ну, вот он вариант. Правильный или нет - другое дело.[/uquote]Переопределять стандартные типы данных - худшее из того что можно было посоветовать.

[uquote="Zhuk72",url="/forum/viewtopic.php?p=3883844#p3883844"]Гораздо проще было в исходниках сменить все uint... на unsigned... - минутное дело - чем выискивать вариант с подключением дополнительных заголовков.[/uquote]Это убивает на корню основной смысл для чего эти типы были введены в стандарт и применяются всеми разумными разработчиками.

[uquote="Asmodey",url="/forum/viewtopic.php?p=3883951#p3883951"]И после MPLAB мне так удобнее :) Лишний библиотечный файл не нужно подключать.[/uquote]Делать надо как правильно. Неправильно оно само получится.
Друг Кота
Аватара пользователя
Сообщения: 6572
Зарегистрирован: Сб янв 28, 2006 22:47:24

Сообщение Asmodey »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3883956#p3883956"][uquote="Asmodey",url="/forum/viewtopic.php?p=3883951#p3883951"]И после MPLAB мне так удобнее :) Лишний библиотечный файл не нужно подключать.[/uquote]Делать надо как правильно. Неправильно оно само получится.[/uquote]
То есть определение типов через файл stdint.h правильно, а все остальное нет? Ну что же, тогда буду привыкать цеплять к проектам stdint.h...
Астролябия-сама меряет, было бы что мерять!!!
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="Asmodey",url="/forum/viewtopic.php?p=3883977#p3883977"]То есть определение типов через файл stdint.h правильно,[/uquote]Правильно использование стандартных типов по назначению. Применение типов uintX_t сильно повышает переносимость кода.

[uquote="Asmodey",url="/forum/viewtopic.php?p=3883977#p3883977"]Ну что же, тогда буду привыкать цеплять к проектам stdint.h...[/uquote]Его не надо "цеплять к проектам". Он есть в системных заголовочных файлах любого компилятора. Он, кстати, в CMSIS подключается. Если в проекте подключен заголовочный файл микроконтроллера, то stdint.h автоматом подключен.
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку

Сообщение Zhuk72 »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3883956#p3883956"][uquote="Zhuk72",url="/forum/viewtopic.php?p=3883844#p3883844"]Гораздо проще было в исходниках сменить все uint... на unsigned... - минутное дело - чем выискивать вариант с подключением дополнительных заголовков.[/uquote]Это убивает на корню основной смысл для чего эти типы были введены в стандарт и применяются всеми разумными разработчиками.[/uquote]
Если предыдущие не были выведены из употребления и поддерживаются компиляторами, использование их не возбраняется.
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Ну если вам осознанно хочется на вопрос "какой разрядности int на компиляторе X для микроконтроллера Y" чесать репу и делать непереносимый код, то запретить это не в моих силах.
Ответить

Вернуться в «ARM»