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

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Открыл глаза
Аватара пользователя
Сообщения: 56
Зарегистрирован: Вт дек 29, 2015 11:33:49

Сообщение pavell »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3574856#p3574856"]А давай сравним
...
Доходчиво?[/uquote]

Владислав, вы читаете что я пишу? Во-первых я поправился тыц, во-вторых мне и без вас хорошо известно, что множественные and or гораздо дороже единичного and со множественным or, ну и в-третьих я предлагал сравнить &= ~( ... | ... | ...) с &= ~... | ~... | ~...) (кстати не утруждайтесь)

[uquote="VladislavS",url="/forum/viewtopic.php?p=3574871#p3574871"]Разберись уже что-ли: адрес, указатель или ссылка. :([/uquote]
По делу что-то будет чем вас не устроила моя запись?

И еще очень попрошу лично вас мне не тыкать.
Последний раз редактировалось pavell Чт фев 21, 2019 10:20:26, всего редактировалось 1 раз.
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18793
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

pavell писал(а):сравнить &= ~( ... | ... | ...) с &= ~... | ~... | ~...
вот я об этом и говорю: многие и не поймут, в чем тут подвох, особенно, если записать в столбик, как было показано ранее.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

Сообщение dosikus »

ARV, если бы тебя сие интересовало не от желания устроить очередной срач...
Что значит не по теме?
Где здесь авр???????????????? :)))
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="pavell",url="/forum/viewtopic.php?p=3574916#p3574916"]По делу что-то будет чем вас не устроила моя запись?[/uquote]
Вот это

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

DMA1_Channel1->CMAR = (uint32_t)&buff[0];
То же самое что

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

DMA1_Channel1->CMAR = (uint32_t)buff;
К чему тут лишняя писанина?
Спойлер[uquote="pavell",url="/forum/viewtopic.php?p=3574916#p3574916"]И еще очень попрошу лично вас мне не тыкать.[/uquote]
Я на форуме на ты обращаюсь к людям, к которым у меня хорошее или нейтральное отношение. Всякие неадекваты, чаще всего, на вы. Выбирай.
Реклама
Эиком - электронные компоненты и радиодетали
Открыл глаза
Аватара пользователя
Сообщения: 56
Зарегистрирован: Вт дек 29, 2015 11:33:49

Сообщение pavell »

То есть в конечном итоге вас не устроила "лишняя писанина" из 4-х символов не влияющая ни на что? Ну ок, суть доёб "претензии" ясна
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

pavell, пример кстати занятный. Если здесь вроде бы "безобидная" трата ресурсов и при ините нисколько не напрягает , то в SPL и калокубе это сплошь и рядом используется не только при ините но и при работе и выливается в ад и ужас.

И вынужден повторить - с каких привилегий, ARV пинающих всем с тем о авр, здесь пасется и пишет чушь????????
Реклама
Мучитель микросхем
Сообщения: 413
Зарегистрирован: Ср янв 04, 2012 11:57:40
Откуда: Алчевск

Сообщение Sergi »

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

Сообщение pavell »

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

Сообщение 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;  */
  );
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

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

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

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

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

Сообщение pavell »

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

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

Сообщение Reflector »

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

Сообщение pavell »

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

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

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

Опять 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:
Станислав
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

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

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

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

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

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

Сообщение WiseLord »

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

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

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

Сообщение 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]
Ответить

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