Страница 270 из 446

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

Добавлено: Чт фев 21, 2019 16:59:32
Sergi
Стараюсь писать так, чтобы код выполнялся быстрее. Некоторые выражения установки битов преобразуются до этапа компиляции.Не забываем что это очень сокращает код и время его выполнения.

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

Добавлено: Чт фев 21, 2019 18:25:14
pavell
[uquote="dosikus",url="/forum/viewtopic.php?p=3575126#p3575126"]pavell, пример кстати занятный. Если здесь вроде бы "безобидная" трата ресурсов и при ините нисколько не напрягает...[/uquote]
Несмотря на стиль изложения трудно не согласится с Владиславом, что нужно сразу приучать себя писать грамотный и понятный код, а на счет хал и т.п. ну пусть останется на совести авторов ))

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

Добавлено: Пт фев 22, 2019 09:25:59
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;  */
  );

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

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

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

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

[](){[](){[](){[](){[](){}();}();}();}();}();
Да не обижайся, считай что это стиль обучения такой, лучше запомнится.

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

Добавлено: Сб фев 23, 2019 09:14:41
pavell
И так, что удалось выяснить. Прерывание происходит, но по какой-то причине оно не переходит в написанный мной обработчик, а уходит в default_handler. Имя из таблицы векторов и имя функции обработчика проверил раз 100, они одинаковые.

[uquote="VladislavS",url="/forum/viewtopic.php?p=3575590#p3575590"]Да не обижайся..[/uquote]
И в мыслях не было.

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

Добавлено: Сб фев 23, 2019 09:32:42
Reflector
[uquote="pavell",url="/forum/viewtopic.php?p=3576233#p3576233"]Прерывание происходит, но по какой-то причине оно не переходит в написанный мной обработчик, а уходит в default_handler.[/uquote]
Если проект на плюсах, то обычно обработчики прерываний должны начинаться с extern "C".

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

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

Во-вторых, как говорится "чудес не бывает, бывают чудаки" )
Я же еще проверил в настройках проекта:
2019-02-23_13-21-41.png
(29.8 КБ) 416 скачиваний
Да и Keil пишет -
2019-02-23_13-22-11.png
(30.64 КБ) 435 скачиваний
А в жизни оказывается, все решает расширение файла (((

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

Добавлено: Вт фев 26, 2019 17:36:42
СКАЗОЧНИК
Опять 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:

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

Добавлено: Вт фев 26, 2019 18:05:21
VladislavS
[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3578505#p3578505"]Как это реализуется ?[/uquote]Если с С++ сильно дружишь, то могу показать. Если нет, то даже пытаться не буду.

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

Добавлено: Вт фев 26, 2019 18:08:31
СКАЗОЧНИК
Я С++ изучал совсем не сильно и где-то в 2006 году... Уже все забыл. Сейчас после ассемблера (и того не большого) разбираюсь с языком программирования С.
Поэтому, наверное и пытаться время тратить не стоит. )

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

Добавлено: Вт фев 26, 2019 22:55:56
Аlex
[uquote="VladislavS",url="/forum/viewtopic.php?p=3578530#p3578530"]Если с С++ сильно дружишь, то могу показать. Если нет, то даже пытаться не буду.[/uquote]Владислав, если будет соблюдена одновременность записи в несколько портов, то я бы с удовольствием посмотрел на такой вариант.
Если это - обычный шаблон, собирающий порты "в кучу" и работающий с ними последовательно - то не нужно :)

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

Добавлено: Ср фев 27, 2019 07:02:42
WiseLord
Какими бы шаблонами или хитрыми макросами ни пользоваться, одновременно в разные порты не записать в принципе. Потому что существует такого машинного кода, в который это должно было бы развернуться.

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

Добавлено: Ср фев 27, 2019 08:10:40
СКАЗОЧНИК
Мне не надо одновременно все включать. Вполне устроит алгоритм все по отдельности. ) ранее, я как-то делал это на АВР и на дефайнах ассемблерных. Как на Си еще не представляю, тем более, у АВР всего три регистра, там было проще. А здесь больше их и по умолчанию они в структурах. :dont_know:

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

Добавлено: Ср фев 27, 2019 08:30:07
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]

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

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

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

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

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

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

Надо было сразу напомнить, код в спойлере

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

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

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

Добавлено: Ср фев 27, 2019 12:22:37
pavell
[uquote="Аlex",url="/forum/viewtopic.php?p=3578911#p3578911"]На мой взгляд, только по одной единственной. Ширина данных в источнике в 2 раза больше чем в приёмнике.[/uquote]
А разве есть разница какая ширина данных в источнике?
В регистре DMA->MSIZE мы задаем значение которое является инкриментом указателя. И указав 8 бит я ожидаю, что указатель и будет увеличиваться на 8 бит. При этом, что и как я укладывал в память на первом этапе никакой роли играть не должно.

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

Добавлено: Ср фев 27, 2019 12:35:02
Аlex
Размер пересылаемых данных указывается как в источнике, так и в приёмнике. Именно по этим значениям DMA знает на сколько байт делать инкременты.

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

Добавлено: Ср фев 27, 2019 13:16:49
pavell
Все это так, но.
По логике вещей раз мы не инкриминируем приемник, то по сути нам не важно какую ширину данных мы ему указываем. Если вернуться к моему случаю, то размерность источника и получателя одинакова и равна 8 бит

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

Добавлено: Ср фев 27, 2019 13:28:05
Аlex
pavell писал(а):мы не инкриминируем приемник
Приёмник - нет, а источник - да. И если он будет = 16 бит, то как раз и получится как в Вашем случае.
В общем, чудес не бывает. Явно что-то с размерами не то.