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

Кто любит RISC в жизни, заходим, не стесняемся.
Sergi
Мучитель микросхем
Сообщения: 412
Зарегистрирован: Ср янв 04, 2012 11:57:40
Откуда: Алчевск

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

Сообщение Sergi »

Стараюсь писать так, чтобы код выполнялся быстрее. Некоторые выражения установки битов преобразуются до этапа компиляции.Не забываем что это очень сокращает код и время его выполнения.
Реклама
Аватара пользователя
pavell
Открыл глаза
Сообщения: 56
Зарегистрирован: Вт дек 29, 2015 11:33:49

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

Сообщение pavell »

[uquote="dosikus",url="/forum/viewtopic.php?p=3575126#p3575126"]pavell, пример кстати занятный. Если здесь вроде бы "безобидная" трата ресурсов и при ините нисколько не напрягает...[/uquote]
Несмотря на стиль изложения трудно не согласится с Владиславом, что нужно сразу приучать себя писать грамотный и понятный код, а на счет хал и т.п. ну пусть останется на совести авторов ))
Реклама
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

pavell, пробуйте еще один вариант , может приживется...

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

 nrf_write_register(NRF24_CONFIG_REG,
    1 * NRF24_CONFIG_PRIM_RX      |  /* Mode control: 0 - TX, 1 - RX;         */
    1 * NRF24_CONFIG_PWR_UP       |  /* Power control: 0 - OFF, 1 - ON;       */
    1 * NRF24_CONFIG_EN_CRC       |  /* CRC control: 0 - disable, 1 - enable; */
    1 * NRF24_CONFIG_CRCO         |  /* CRC encoding scheme: 0 - 1 byte, 1 – 2 bytes                       */
    1 * NRF24_CONFIG_MAX_RT       |  /* MAX_RT interrupt reflection on the IRQ pin: 0 - enable, 1 - disable; */
    1 * NRF24_CONFIG_TX_DS        |  /* TX_DS interrupt reflection on the IRQ pin: 0 - enable, 1 - disable;  */
    0 * NRF24_CONFIG_RX_DR           /* RX_DR interrupt reflection on the IRQ pin: 0 - enable, 1 - disable;  */
  );
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

[uquote="pavell",url="/forum/viewtopic.php?p=3575060#p3575060"]не влияющая ни на что?[/uquote]Если бы каждый раз слыша этот довод мне на счёт капал один "дохлый президент", я бы уже бросил работу :) Ну вот смотри. В переменной buff адрес массива лежит. Зачем вместо использования его напрямую по назначению брать адрес нулевого элемента массива? Да, результат тот же, но зачем? Хотелось бы ход мысли узнать.

Вот, кстати, пример кода, который "ни на что не влияет". Можно вставлять в произвольных местах программы. :) Только не забыть С++ включить.

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

[](){[](){[](){[](){[](){}();}();}();}();}();
Да не обижайся, считай что это стиль обучения такой, лучше запомнится.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
pavell
Открыл глаза
Сообщения: 56
Зарегистрирован: Вт дек 29, 2015 11:33:49

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

Сообщение pavell »

И так, что удалось выяснить. Прерывание происходит, но по какой-то причине оно не переходит в написанный мной обработчик, а уходит в default_handler. Имя из таблицы векторов и имя функции обработчика проверил раз 100, они одинаковые.

[uquote="VladislavS",url="/forum/viewtopic.php?p=3575590#p3575590"]Да не обижайся..[/uquote]
И в мыслях не было.
Вложения
2019-02-23_12-00-17.png
(37.13 КБ) 424 скачивания
2019-02-23_11-47-32.png
(55.93 КБ) 435 скачиваний
Реклама
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

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

Сообщение Reflector »

[uquote="pavell",url="/forum/viewtopic.php?p=3576233#p3576233"]Прерывание происходит, но по какой-то причине оно не переходит в написанный мной обработчик, а уходит в default_handler.[/uquote]
Если проект на плюсах, то обычно обработчики прерываний должны начинаться с extern "C".
Реклама
Аватара пользователя
pavell
Открыл глаза
Сообщения: 56
Зарегистрирован: Вт дек 29, 2015 11:33:49

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

Сообщение pavell »

[uquote="Reflector",url="/forum/viewtopic.php?p=3576240#p3576240"]Если проект на плюсах, то обычно обработчики прерываний должны начинаться с extern "C".[/uquote]
Во-первых огромное СПАСИБО! именно в этом и была причина.

Во-вторых, как говорится "чудес не бывает, бывают чудаки" )
Я же еще проверил в настройках проекта:
2019-02-23_13-21-41.png
(29.8 КБ) 410 скачиваний
Да и Keil пишет -
2019-02-23_13-22-11.png
(30.64 КБ) 430 скачиваний
А в жизни оказывается, все решает расширение файла (((
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Опять 25!
:)))

Короче, работать с портами (без СПЛ и ХАЛ) только на базе CMSYS приходится с помощью структур и обращений к элементам структуры. (Как впрочем и со всем остальным).
Мне теперь интересно, как переназначить (передефайнить) определения регистров порта, пинов и т.д.
Создать что-то типа "виртуального" порта. Т.е. если у меня внешний модуль какой-нибудь типа светодиодов (или еще чего-нибудь) подключен не к одному порту целиком, а к разным пинам, но управлять ими надо как с одного регистра.
Типа:

LED_1 = ON;
LED_2 = OFF;

Или:

LED_PORT |= (LED_1_ON | LED_2_OFF | LED_3_ON);

Или даже :

LED_PORT = 0b11000111100;

При этом все LED сидят фактиччески на PORTA, PORTB и т.д. На любых пинах.

Как это реализуется ? Ткните тоже носой. :dont_know:
Станислав
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3578505#p3578505"]Как это реализуется ?[/uquote]Если с С++ сильно дружишь, то могу показать. Если нет, то даже пытаться не буду.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Я С++ изучал совсем не сильно и где-то в 2006 году... Уже все забыл. Сейчас после ассемблера (и того не большого) разбираюсь с языком программирования С.
Поэтому, наверное и пытаться время тратить не стоит. )
Станислав
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3578530#p3578530"]Если с С++ сильно дружишь, то могу показать. Если нет, то даже пытаться не буду.[/uquote]Владислав, если будет соблюдена одновременность записи в несколько портов, то я бы с удовольствием посмотрел на такой вариант.
Если это - обычный шаблон, собирающий порты "в кучу" и работающий с ними последовательно - то не нужно :)
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Какими бы шаблонами или хитрыми макросами ни пользоваться, одновременно в разные порты не записать в принципе. Потому что существует такого машинного кода, в который это должно было бы развернуться.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Мне не надо одновременно все включать. Вполне устроит алгоритм все по отдельности. ) ранее, я как-то делал это на АВР и на дефайнах ассемблерных. Как на Си еще не представляю, тем более, у АВР всего три регистра, там было проще. А здесь больше их и по умолчанию они в структурах. :dont_know:
Станислав
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

[uquote="Аlex",url="/forum/viewtopic.php?p=3578697#p3578697"]Владислав, если будет соблюдена одновременность записи в несколько портов, то я бы с удовольствием посмотрел на такой вариант.[/uquote]Я бы тоже с удовольствием посмотрел на команду одновременной записи в разные порты ;)

[uquote="Аlex",url="/forum/viewtopic.php?p=3578697#p3578697"]Если это - обычный шаблон, собирающий порты "в кучу" и работающий с ними последовательно - то не нужно :)[/uquote]Это шаблоны на основе списка типов. Уже не первый раз слышу мнение, что в современном С++ всё то же самое можно сделать на вариативных шаблонах. Попробовал, но итератор проще не получается.

Пример. Уж не знаю насколько это одновременно.

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

  using DATA = PinList<PA_0,PB_0,PA_1,PB_1,PA_2,PB_2,PA_3,PB_3>;
  DATA data = 0xAA;

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

        LDR.N    R0,??main_0      ;; 0x40010810
        MOV      R1,#+983040
        STR      R1,[R0, #+0]
        MOV      R2,#+983055
        STR      R2,[R0, #+1024]
Аватара пользователя
pavell
Открыл глаза
Сообщения: 56
Зарегистрирован: Вт дек 29, 2015 11:33:49

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

Сообщение pavell »

Подскажите еще один момент с DMA - > UART.
Первый канал DMA пишет данные из периферии в память по 16 бит, с этим проблем нет, а вот дальше возникает нюанс. Указываю второму каналу, что разрядность и памяти, и периферии 8 бит, но при отправке каждый второй байт теряется.
Т.е. имеем в памяти допустим:

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

0xAA 0xBB 0xCC 0xDD 
а UART дает на выходе:

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

0xAA 0xCC 
По какой причине это происходит?

Надо было сразу напомнить, код в спойлере
Последний раз редактировалось pavell Ср фев 27, 2019 12:34:10, всего редактировалось 1 раз.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

[uquote="WiseLord",url="/forum/viewtopic.php?p=3578774#p3578774"]Какими бы шаблонами или хитрыми макросами ни пользоваться, одновременно в разные порты не записать в принципе. Потому что существует такого машинного кода, в который это должно было бы развернуться.[/uquote]Я с периферией STM32 ещё плохо знаком, по этому и спросил, на всякий случай. Вдруг там есть какие хитрости...
pavell писал(а):По какой причине это происходит?
На мой взгляд, только по одной единственной. Ширина данных в источнике указана в 2 раза больше чем в приёмнике.
Аватара пользователя
pavell
Открыл глаза
Сообщения: 56
Зарегистрирован: Вт дек 29, 2015 11:33:49

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

Сообщение pavell »

[uquote="Аlex",url="/forum/viewtopic.php?p=3578911#p3578911"]На мой взгляд, только по одной единственной. Ширина данных в источнике в 2 раза больше чем в приёмнике.[/uquote]
А разве есть разница какая ширина данных в источнике?
В регистре DMA->MSIZE мы задаем значение которое является инкриментом указателя. И указав 8 бит я ожидаю, что указатель и будет увеличиваться на 8 бит. При этом, что и как я укладывал в память на первом этапе никакой роли играть не должно.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

Размер пересылаемых данных указывается как в источнике, так и в приёмнике. Именно по этим значениям DMA знает на сколько байт делать инкременты.
Аватара пользователя
pavell
Открыл глаза
Сообщения: 56
Зарегистрирован: Вт дек 29, 2015 11:33:49

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

Сообщение pavell »

Все это так, но.
По логике вещей раз мы не инкриминируем приемник, то по сути нам не важно какую ширину данных мы ему указываем. Если вернуться к моему случаю, то размерность источника и получателя одинакова и равна 8 бит
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

pavell писал(а):мы не инкриминируем приемник
Приёмник - нет, а источник - да. И если он будет = 16 бит, то как раз и получится как в Вашем случае.
В общем, чудес не бывает. Явно что-то с размерами не то.
Ответить

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