Например TDA7294

Форум РадиоКот • Просмотр темы - Ассемблер для STM32. Сложно ли, стоит ли пытаться?
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Ср мар 03, 2021 08:36:21

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 284 ]     ... , , , 13, ,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?
СообщениеДобавлено: Сб дек 19, 2020 08:58:28 
Опытный кот

Карма: 15
Рейтинг сообщений: 107
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 887
Рейтинг сообщения: 0
Тихо, уважаемый, тихо.
Я сравнивал в протеусе время измерения, на какой частоте было - мне все равно на какой частоте он там работает.

Далее, я у вас спросил, вы листинг смотрели или в реальном устройстве, вы мне что ответили?

Далее, это ваше?
Код:
typedef struct{
   uint32_t *bsrr;
   uint32_t mask;
} port_pin;

void port_write64 (const port_pin *p, int a, uint64_t data)
{
  do
  {
    uint32_t const count = a>32 ? 32 : a ;
    for(uint8_t i=0; i<count; i++)
    {
      if ((uint32_t)data & (1<<i))
        *p->bsrr = p->_or;
       else
         *(p->bsrr+4) = p->_or;
         // Для контроллеров у которых нет BSRR
         //*(volatile uint16_t *)((uint16_t *)p->bsrr+1) = p->_or;
      p++;       
    }
    data >>= 32;
    a-=32;
  }
  while(a>0);
}
А теперь вопрос, на какой адрес вот это
Код:
*(p->bsrr+4)
перейдет, если тип указателя задан, именно вами, не мной, вами uint32_t *bsrr;?


Вернуться наверх
 
В сети
 Заголовок сообщения: Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?
СообщениеДобавлено: Сб дек 19, 2020 09:10:27 
Говорящий с текстолитом
Аватар пользователя

Карма: 11
Рейтинг сообщений: 250
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 1519
Рейтинг сообщения: 0
А теперь вопрос, на какой адрес вот это
Код:
*(p->bsrr+4)
перейдет, если тип указателя задан, именно вами, не мной, вами uint32_t *bsrr;?
А подумать? Имея RM на контроллер, листинг этого фрагмента кода и понимание того что он должен делать просто невозможно не понять что это. После ваших хамских выпадов отвечать на него не хочу.

И ещё небольшое наблюдение. Вот этот вызов
Код:
port_write (pins, sizeof(pins)/sizeof(port_pin), 0b00100101101001001000001010010100100);
это запись трёх констант в BSRR портов A,B,C. Это, на вскидку, около 16 тактов процессора или 0.2 мкс на вашем f103.



Вернуться наверх
 
Друзья! Скоро Новый Год! Китайский! Но мы работаем и в праздники тоже!

JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

Отличное качество, подтвержденное более чем 600,000 пользователей! Более 10,000 заказов в день.

Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/quote

Не в сети
 Заголовок сообщения: Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?
СообщениеДобавлено: Сб дек 19, 2020 09:30:03 
Опытный кот

Карма: 15
Рейтинг сообщений: 107
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 887
Рейтинг сообщения: 0
VladislavS писал(а):
Как тут можно не понять?
Ну не знаю
Код:
STRPL    R7,[R6, #+16]

GPIOA_BSRR   0x40010810   
GPIOA_BRR   0x40010814
0x40010810 +16 = 0x40010820


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
В сети
 Заголовок сообщения: Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?
СообщениеДобавлено: Сб дек 19, 2020 09:36:20 
Говорящий с текстолитом
Аватар пользователя

Карма: 11
Рейтинг сообщений: 250
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 1519
Рейтинг сообщения: 0
GPIOA_BRR 0x40010814[/code] 0x40010810 +16 = 0x40010820
Да, вы правы, на F103 действительно BRR идёт сразу за BSRR. Я посмотрел RM от другого контроллера. Можете исправить на *(p->bsrr+1). На скорость это не повлияет.


Вернуться наверх
 
Запускаем новый BLE 5.2-чип BlueNRG-LP от STMicroelectronics

Любая разработка начинается с чтения документации и изучения доступных средств разработки. Данный материал целиком посвящен средствам разработки, включая детальные инструкции по запуску вашего первого приложения на BlueNRG-LP. Описана работа с отладкой STEVAL-IDB011V1, набором инструментов и пакетом ПО позволяющим разработчику быстро войти в курс дела.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?
СообщениеДобавлено: Сб дек 19, 2020 09:55:49 
Опытный кот

Карма: 15
Рейтинг сообщений: 107
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 887
Рейтинг сообщения: 0
По этому у меня в HardFault и падало, я не посмотрел что там по этому адресу 0x40010820 у F103 расположено.

Еще одну функцию написал, чтение списка пинов
Вот ее можете покопать, выслушаю все предложения.


Вернуться наверх
 
Революция в силовой электронике. Начало

Что привлекает в SiC по сравнению с кремнием, и какие особенности делают компоненты SiC часто используемыми, несмотря на более высокую стоимость в сравнении с кремниевыми высоковольтными устройствами? – Объясняет специалист ведущего разработчика силовых приборов из карбида кремния, компании Infineon.

Читать статью>>
В сети
 Заголовок сообщения: Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?
СообщениеДобавлено: Сб дек 19, 2020 10:01:23 
Говорящий с текстолитом
Аватар пользователя

Карма: 11
Рейтинг сообщений: 250
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 1519
Рейтинг сообщения: 0
Спасибо за разрешение! Но я воздержусь.

А ещё, мне кажется это оффтоп в данной теме.


Вернуться наверх
 


Не в сети
 Заголовок сообщения: Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?
СообщениеДобавлено: Сб дек 19, 2020 14:18:08 
Опытный кот

Карма: 15
Рейтинг сообщений: 107
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 887
Рейтинг сообщения: -3
VladislavS писал(а):
мне кажется
креститься надо.
VladislavS писал(а):
это оффтоп в данной теме
как и все остальное начиная со второй странице, по теме ровно 0.


Вернуться наверх
 


Не в сети
 Заголовок сообщения: Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?
СообщениеДобавлено: Сб дек 19, 2020 14:58:54 
Это не хвост, это антенна

Карма: 20
Рейтинг сообщений: 218
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 1331
Рейтинг сообщения: 0
как и все остальное начиная со второй странице, по теме ровно 0.

Лично я на каждой странице вижу код на C/C++ с выхлопом на ассме и хотя в первую очередь он нужен для сравнения самих С и С++ между собой, но то же самое пришлось бы делать сравнивая их эффективность с ассмом.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?
СообщениеДобавлено: Пн дек 28, 2020 09:48:21 
Встал на лапы

Карма: -2
Рейтинг сообщений: 4
Зарегистрирован: Вс сен 06, 2020 16:06:10
Сообщений: 121
Рейтинг сообщения: 0
А теперь вставь этот код в прерывание, допустим, где содержимое регистров за тебя никто раньше не загрузил. А примени в другой единице трансляции, а... Да много ли ещё чего бывает. Компилятор не устаёт.
В принципе пойнт, но не game changer. И к тому же меня в основном инетерсуют F1 и L1. Как баланс между обкоцаностью и оверинженерией, у них BRR есть. Чего это я им не должен пользоваться?

Цитата:
Я же показал что будет. Указываем список пинов и погнали. Причем, пины могут быть из разных портов в любой последовательности. Всё сгруппируется как надо. Это могут быть не только set или reset, а write, read, toggle.
Это здорово, но мне трудно понять насколько (не)эффективным будет та или иная конструкция на плюсах. И судя по тому как там Reflector с Oxford дебатировал, это не уникально для одного меня. А тут убедить компилер на эффективный код даже для группы пинов - как 2 байта переслать. Почти.

Более того - попался мне DMA. И понравился. В чем прикол? ТЕ ЖЕ САМЫЕ константы (и/или методы их получения) - ОК. Для примерно того же. С некоторыми оговорками, но даже с ними видится много интересных практических применений, типа "заталкивания пакета в дисплей" или "PWM на много каналов". Полностью хардварно. А с теми абстракциями придется стиль мышления извернуть на 180 градусов. Ну вот нет у DMA понятия - набор пинов. А битовая маска - какая разница, проц в BSRR загонит или DMA? :P Вообще, DMA по размеру кода в победители напрашивается. Лучший код - отсутствие оного.

Цитата:
Я даже не буду просить повторить нижеследующий пример. Берём две группы пинов на разных портах. Читаем одну группу как байт, инвертируем и записываем во вторую группу.
Когда кто-то так делает, оптимальность их точно не волновала.

Цитата:
Сколько вы это будете руками ковырять... Компилятор делает за долю секунды.
Да нисколько. Постараюсь чтобы оно оптимально раскидывалось и оформлю парой констант. Зачем создавать себе проблемы на ровном месте?

Цитата:
Только без BRR. В F4 или H7, например. Мэинстрим, как ни крути, приходится учитывать.
Я ими не пользуюсь и не планирую.


Вернуться наверх
 
В сети
 Заголовок сообщения: Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?
СообщениеДобавлено: Пн дек 28, 2020 12:11:23 
Говорящий с текстолитом
Аватар пользователя

Карма: 11
Рейтинг сообщений: 250
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 1519
Рейтинг сообщения: 0
iddqd, в чём вопрос то?

Добавлено after 8 minutes 18 seconds:
А тут убедить компилер на эффективный код даже для группы пинов - как 2 байта переслать.
Если вас устраивает проигрыш в скорости на порядок, то и ну его на.
Более того - попался мне DMA.
Когда научите DMA код выполнять - приходите.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?
СообщениеДобавлено: Пн дек 28, 2020 14:20:01 
Встал на лапы

Карма: -2
Рейтинг сообщений: 4
Зарегистрирован: Вс сен 06, 2020 16:06:10
Сообщений: 121
Рейтинг сообщения: 0
Цитата:
Если вас устраивает проигрыш в скорости на порядок, то и ну его на.
У меня никакого проигрыша в скорости на порядок совершенно точно не будет. Откуда и с фига ли?
Цитата:
Когда научите DMA код выполнять - приходите.
Двухъядерник возьмите, получите желаемое! Только это половину смысла уроет: DMA без проблем запихнет килобайт в BSRR - без единого байта инструкций по шинам вообще. А если это процессорное ядро, даже второе - уже не то. Вот как раз потому что кроме потока данных по шинам еще поток команд будет. Без него видите ли процессор вообще работать не может.


Вернуться наверх
 
В сети
 Заголовок сообщения: Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?
СообщениеДобавлено: Пн дек 28, 2020 15:17:11 
Говорящий с текстолитом
Аватар пользователя

Карма: 11
Рейтинг сообщений: 250
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 1519
Рейтинг сообщения: 3
У меня никакого проигрыша в скорости на порядок совершенно точно не будет. Откуда и с фига ли?
Шо, опять? На очередной круг без меня. Именно на порядок.

Двухъядерник возьмите, получите желаемое!
???

DMA без проблем запихнет килобайт в BSRR
Этот килобайт конечно же из воздуха материализуется? А в 3 разных BSRR распихает?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?
СообщениеДобавлено: Вт дек 29, 2020 06:36:51 
Встал на лапы

Карма: -2
Рейтинг сообщений: 4
Зарегистрирован: Вс сен 06, 2020 16:06:10
Сообщений: 121
Рейтинг сообщения: 0
Чего не понятно? Берете что-нибудь 2-ядерное, второго можете использовать как "DMA выполняющий код". Ну там кинуть ему пакет - закопируй от сих до сих! Или что там. Так, кстати, иногда делают. Правда все-же не как замену DMA, скорее управление питанием, offload быстрых дергов с основного и проч. И это имеет больше смысла если там своя отдельная подсистема памяти и шины, а то по той же шине еще чей-то поток команд и данных уже как-то менее интересно и там желание "чтоб еще и код выполнять умел" становится багом - поток команд шину грузит.

Цитата:
Этот килобайт конечно же из воздуха материализуется? А в 3 разных BSRR распихает?

Из флеша или RAM, естественно. В три - не распихает, фокус с своими ограничениями. Однако и с одним BSRR можно здорово поприкалываться, предоставив DMA ворочать лапки и ... занявшись чем-нибудь другим. Параллельно с этим вообще. Оно как бы не всегда катит, но так можно - например полностью аппаратный PWM шириной в порт сделать. Или сколько там хотелось. А формировка констант заполнения этого ничем не будет принципиально отличаться от других операций с BSRR. А высокие абстракции это круто, но на это уже совсем не похоже. И если чего-то такого захочется - заведем две разных абстракции для одного и того же?


Вернуться наверх
 
В сети
 Заголовок сообщения: Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?
СообщениеДобавлено: Вт дек 29, 2020 07:48:12 
Говорящий с текстолитом
Аватар пользователя

Карма: 11
Рейтинг сообщений: 250
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 1519
Рейтинг сообщения: 3
iddqd, вы так лихо ворвались со своим DMA в тему управления списками пинов, да ещё заочно объявив себя победителем. При этом повторить, худо бедно, но работающий пример Dimon456 тупо не сможете.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?
СообщениеДобавлено: Вт дек 29, 2020 08:55:24 
Встал на лапы

Карма: -2
Рейтинг сообщений: 4
Зарегистрирован: Вс сен 06, 2020 16:06:10
Сообщений: 121
Рейтинг сообщения: 0
VladislavS, этот топик "виноват" в том что я задумался про "размер кода" и в результате случайно понял что иногда кода может и не быть совсем, если dma использовать. Так что иногда в споре рождаются неплохие идеи...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?
СообщениеДобавлено: Чт дек 31, 2020 23:21:14 
Опытный кот

Карма: 15
Рейтинг сообщений: 107
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 887
Рейтинг сообщения: 0
Поигрался я с идеей iddqd, есть 2 варианта:
1 вариант, когда пины располагаются на одном порту, не важно в какой последовательности.
ОЗУ на один пин 4 байта, на 8 пинов 32 байта.
Если хранить картинку 256*256 точек, да в добавок в цветном изображении, параллельный порт 8 пинов, 256*256*3*32 = 6.291.456 байт.?
Ну как так можно без кода обойтись? Ведь еще сжать картинку можно, без кода ни как.
1 вариант не интересен, обычный дма, буфер, чего тут интересного.

2 вариант, это когда на разных BSRR.
Проблема: ни как не поменять значение в регистре CPAR
Код:
A   0x40010810
B   0x40010C10
C   0x40011010
без выключения канала.
Значит дма будем запускать только на один пин, а в прерывании выключать канал,
подсовывать адрес и данные и заново включать канал.
Ну поморгать светодиодами в реальном железе я поморгал, ну нету у меня логических анализаторов что бы посмотреть что в реальности происходит, но как бы в отладчике - вроде все верно моргает.
Вот код самого прерывания
Самое главное - без кода ни как.
А теперь вопрос в практическом применении, для чего и за чем? И где тут выигрыш в скорости?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?
СообщениеДобавлено: Пт янв 01, 2021 01:53:02 
Встал на лапы
Аватар пользователя

Карма: 2
Рейтинг сообщений: 9
Зарегистрирован: Сб янв 09, 2016 15:51:17
Сообщений: 100
Рейтинг сообщения: 0
С новым годом ногодрыги.
Если хранить картинку 256*256 точек, да в добавок в цветном изображении, параллельный порт 8 пинов, 256*256*3*32 = 6.291.456 байт.?
Ну как так можно без кода обойтись?

Для того чтобы графику в жк индикатор писать - нужно дма вместе с таймером использовать.

_________________
sRtoS


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?
СообщениеДобавлено: Пт янв 01, 2021 02:22:58 
Собутыльник Кота

Карма: 36
Рейтинг сообщений: 798
Зарегистрирован: Ср ноя 29, 2017 06:58:50
Сообщений: 2915
Рейтинг сообщения: 0
Dimon456 прав: решать надо прикладные задачи, а там всё иначе.
То, что что-то можно якобы без кода - это неправильное мнение часто встречается у "батонокидателей" визуального программирования. Ну да, какой тут код, когда всё делает Cube MX...
iddqd, у Вас неверное представление о назначении DMA и особенно - о PWM. PWM в микроконтроллере это значительно больше, чем "ногодрыганье" с определенной частотой, и как только начнётся попытка реализовать его полноценную работу, и глянется на блок-схему, то на DMA останется минимум функционала.


Вернуться наверх
 
В сети
 Заголовок сообщения: Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?
СообщениеДобавлено: Вс янв 03, 2021 09:31:11 
Говорящий с текстолитом
Аватар пользователя

Карма: 11
Рейтинг сообщений: 250
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 1519
Рейтинг сообщения: 0
Dimon456 прав: решать надо прикладные задачи, а там всё иначе.
Вот смотрите как он их решает. Я уже чуть выше цитировал этот код.
Код:
port_write (pins, sizeof(pins)/sizeof(port_pin), 0b00100101101001001000001010010100100);
Вместо записи трёх констант по трём адресам, доступным от одного базового по смещению, эта байда раскручивается в жуткий цикл. А всё из-за ограничений языка пргораммирования.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?
СообщениеДобавлено: Вс янв 03, 2021 11:03:48 
Опытный кот

Карма: 15
Рейтинг сообщений: 107
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 887
Рейтинг сообщения: 0
VladislavS, а ваш метод, С++, покажите ассемблер:
Переменная a объявлена как volatile и не статическая переменная,
цикл while скажет компилятору что функция будет использоваться многократно.

И на забывайте, что в СИ я то же могу использовать inline функцию.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 284 ]     ... , , , 13, ,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y