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

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

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

Сообщение WiseLord »

А теперь сделайте этот же коронный номер на C, пожалуйста.

Ну и интересно, каковы накладные расходы на хранение такого рода списка пинов. То, что они быстро работают, мы уже поняли, но интересно, сколько flash/ram памяти на них уходит.
Реклама
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

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

Сообщение Reflector »

[uquote="Sergi",url="/forum/viewtopic.php?p=3758000#p3758000"]Проверил скорость вех вариантов.
BSRR победил как всегда :))[/uquote]
У тебя задействованы не все оптимизации, если данные, WR и DC будут на одном порту, то для кода

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

void lcd_send_cmd(uint8_t cmd)
{
	LCD_DC_L;
	LCD_WR_L;
	GPIOB->BSRR = 0xff000000 | (cmd << 8);
	LCD_WR_H;
	LCD_DC_H;
}

uint8_t data = GPIOB->IDR;
lcd_send_cmd(data);
получим
Спойлер

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

ldr r2, [pc, #536]
ldr r3, [r2, #16] 

lsls r3, r3, #8 
mov.w r0, #0x200000 
uxth r3, r3 
str r0, [r2, #24] 
orr.w r3, r3, #0xFF000000 
mov.w r4, #0x800000 
movs r0, #128 
mov.w r12, #32 
str r4, [r2, #24] 
str r3, [r2, #24] 
str r0, [r2, #24] 
str.w r12, [r2, #24]
Однако запись можно совместить и получить такой вариант:

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

using LCD_DC = PB5;
using LCD_WR = PB7;
using LCD_DATA = GpioB<0xFF00>;

void lcd_send_cmd(uint8_t cmd)
{
	PinList<LCD_DC, LCD_WR, LCD_DATA>::write(cmd);
	LCD_WR::set();
	LCD_DC::set();
}
Спойлер

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

ldr r2, [pc, #528]
ldr r3, [r2, #16] 

lsls r3, r3, #8 
uxth r3, r3 
orr.w r3, r3, #0xFF000000 
orr.w r3, r3, #0xA00000 
movs r0, #128	; 0x80 
mov.w r12, #32 
str r3, [r2, #24] 
str r0, [r2, #24] 
str.w r12, [r2, #24]
Реклама
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

[uquote="WiseLord",url="/forum/viewtopic.php?p=3758189#p3758189"]А теперь сделайте этот же коронный номер на C, пожалуйста.[/uquote]

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

*((volatile uint8_t *)&GPIOB->ODR +1) = (__RBIT(GPIOB->IDR)>>24);
[uquote="WiseLord",url="/forum/viewtopic.php?p=3758189#p3758189"]Ну и интересно, каковы накладные расходы на хранение такого рода списка пинов. То, что они быстро работают, мы уже поняли, но интересно, сколько flash/ram памяти на них уходит.[/uquote]Ноль целых, хрен десятых. Я же привёл листинг. Это ВСЁ!!! Они обрабатываются на этапе компиляции.
Последний раз редактировалось VladislavS Ср дек 18, 2019 15:19:47, всего редактировалось 1 раз.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

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

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

Сообщение Sergi »

2 Reflector
Я пишу на С и там с -O3 получается так

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

      136:     LCD_DC_L; 
0x08000AF4 4A08      LDR      r2,[pc,#32]  ; @0x08000B18
0x08000AF6 F04F7180  MOV      r1,#0x1000000
0x08000AFA 6011      STR      r1,[r2,#0x00]
   137:                 LCD_WR_L; 
0x08000AFC 104B      ASRS     r3,r1,#1
0x08000AFE 4907      LDR      r1,[pc,#28]  ; @0x08000B1C
0x08000B00 600B      STR      r3,[r1,#0x00]
   138:                 GPIOB->BSRR = 0xff000000 | (cmd<<8); 
0x08000B02 F04F437F  MOV      r3,#0xFF000000
0x08000B06 EA432000  ORR      r0,r3,r0,LSL #8
0x08000B0A 6008      STR      r0,[r1,#0x00]
   139:     LCD_WR_H; 
0x08000B0C 2080      MOVS     r0,#0x80
0x08000B0E 6008      STR      r0,[r1,#0x00]
   140:                 LCD_DC_H; 
0x08000B10 0040      LSLS     r0,r0,#1
0x08000B12 6010      STR      r0,[r2,#0x00]
Как написать на С Ваше выражение?
Реклама
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

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

Сообщение Reflector »

[uquote="Sergi",url="/forum/viewtopic.php?p=3758319#p3758319"]Как написать на С Ваше выражение?[/uquote]
Там по листингу видно, что вместо 0xFF00'0000 используется 0xFFA0'0000, т.е. дополнительно сбрасываются в 0 WR и DC. Будет одна запись в BSRR вместо трех.
Реклама
Аватара пользователя
Asmodey
Друг Кота
Сообщения: 6371
Зарегистрирован: Сб янв 28, 2006 22:47:24

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

Сообщение Asmodey »

Какие страшные вещи вы тут обсуждаете, в теме для новичков. Аж мороз по коже...

У меня все проще, STM32F303BC стала не видна после случайной попытки изнасилования прошивкой для F103 из кейла дебагером ST-Link. Не видна не в утилите ST-Link, ни в IAR. При попытке приконнектится к микроконтроллеру вылезают сообщения об отсутствии целевого устройства. Это теперь навсегда или можно как-то исправить?

Попробовать через usart ее почистить? Но, вроде как для запуска загрузчика нужно ноги boot подтянуть и притянуть на плюс-минус питания? Reset обязательно нужно к чему-то подключить?

ПЫСЫ. До того МК определялся в утилите ST-Link как STM32F302/303. А после того как потыкался в него из кайла, космика и еще чего-то, пропал МК из виду. Есть еще микроконтроллеры, но перепаивать переходную плату, да потом снова запороть микроконтроллер очень не хотелось бы.
Последний раз редактировалось Asmodey Ср дек 18, 2019 22:28:37, всего редактировалось 2 раза.
Астролябия-сама меряет, было бы что мерять!!!
Аватара пользователя
afz
Опытный кот
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

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

Сообщение afz »

Попробуй запустить с нажатым Ресетом. Код чужой прошивки, естественно, работает неправильно и, похоже, отключает что-то из отладочных средств, из-за чего ST-link перестает работать. Запуск с Ресета позволит запустить ST-link, не выполнив ни одного байта из кода чужой прошивки.
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Sergi
Мучитель микросхем
Сообщения: 412
Зарегистрирован: Ср янв 04, 2012 11:57:40
Откуда: Алчевск

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

Сообщение Sergi »

Перенес ногу DC на порт В. Добавил линию задержки RCD для DC. Код сократился до

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


   136:                 GPIOB->BSRR = 0xff900000 | (cmd<<8);GPIOB->BSRR = 0x00000090; 
0x08000AF4 4903      LDR      r1,[pc,#12]  ; @0x08000B04
0x08000AF6 EB012100  ADD      r1,r1,r0,LSL #8
0x08000AFA 4803      LDR      r0,[pc,#12]  ; @0x08000B08
0x08000AFC 6001      STR      r1,[r0,#0x00]
0x08000AFE 2190      MOVS     r1,#0x90
0x08000B00 6001      STR      r1,[r0,#0x00]
Получился самый быстрый код.
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

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

Сообщение Reflector »

[uquote="Sergi",url="/forum/viewtopic.php?p=3758809#p3758809"]Получился самый быстрый код.[/uquote]
Значение DC скорее всего защелкивается вместе с данными по фронту WR, если DC и WR устанавливать одновременно, то мы опять возвращаемся к тому с чего начали, т.е. неопределенному поведению. Поменяется частота или длина проводов и уже может начать глючить, хотя весьма вероятно оно изредка глючит уже сейчас.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

То есть, если что и задерживать, то как раз WR.

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

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

Сообщение Sergi »

DC устанавливается с задержкой 22 наносекунды от WR. Сбрасывается через 2. Визуально помех пока не обнаружил.Будут помехи - разделю установку.
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

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

Сообщение Reflector »

[uquote="Sergi",url="/forum/viewtopic.php?p=3758834#p3758834"]DC устанавливается с задержкой 22 наносекунды от WR. Сбрасывается через 2. Визуально помех пока не обнаружил.Будут помехи - разделю установку.[/uquote]
Насколько совмещенная установка влияет на производительность учитывая, что в основном на дисплей передаются данные для которых дергать DC не нужно? Думаю разницы практически не будет. Например, выводим символ 8*12, это 192 байта данных цветов плюс 4 или 8 данных координат окна, итого 200 байт против 3 для работы с регистрами которые будут на треть медленнее. Заметное замедление будет наблюдаться только если задавать координаты для каждой выводимой точки, иначе разница должны быть меньше процента.
Последний раз редактировалось Reflector Чт дек 19, 2019 13:18:16, всего редактировалось 1 раз.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

Что-то тут не так. Надо первой командой устанавливать: WR=0, нужное значение DC и Data(Cmd). Второй командой ставить WR=1, а остальное пусть остаётся старое. Так без всяких линий задержки должно работать.
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

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

Сообщение Reflector »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3758855#p3758855"]Что-то тут не так. Надо первой командой устанавливать: WR=0, нужное значение DC и Data(Cmd). Второй командой ставить WR=1, а остальное пусть остаётся старое. Так без всяких линий задержки должно работать.[/uquote]
Кстати да, по скорости так действительно лучше будет, главное потом не забыть сбросить DC если захочется передавать данные при помощи DMA :)

ps. Но у себя так не буду делать, потому что не использую F1 и быстрее будет писать только данные в половинку порта, а DC сбрасывать при значительно более редких обращениях к регистрам дисплея.
Аватара пользователя
Asmodey
Друг Кота
Сообщения: 6371
Зарегистрирован: Сб янв 28, 2006 22:47:24

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

Сообщение Asmodey »

[uquote="afz",url="/forum/viewtopic.php?p=3758451#p3758451"]Попробуй запустить с нажатым Ресетом. Код чужой прошивки, естественно, работает неправильно и, похоже, отключает что-то из отладочных средств, из-за чего ST-link перестает работать. Запуск с Ресета позволит запустить ST-link, не выполнив ни одного байта из кода чужой прошивки.[/uquote]
Только сейчас дошли руки до макетки с этим МК. Замутил ресет, МК тут же определился, стерся и зашился по новой правильной прошивкой. afz, спасибо. Нужно ST-Link_ом с линией NRST для STM32 обзавестись.
Астролябия-сама меряет, было бы что мерять!!!
Аватара пользователя
afz
Опытный кот
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

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

Сообщение afz »

Asmodey, вот так можно доработать обычный китайский ST-link. Там, правда, предлагают отсоединять "лишние" (продублированные) ноги +3.3 и +5В, а я, по-простому, откинул ноги для STM8 (как бы не те, которые автор этого материала использовал первоначально). И еще момент. Совсем тонкий МГТФ (там у него, как бы, не МГТФ 0.03) сейчас хрен найдешь, я, по-простому, воспользовался обычным обмоточным проводом в эмалевой изоляции - мне попался под руку ПЭТВ-F 0.2, но это, сам понимаешь, некритично. Дополнительный плюс - МГТФ - многожилка, которая норовит разползтись при пайке на вывод SMD-компонента, а обмоточный провод сплошной...
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Аватара пользователя
Asmodey
Друг Кота
Сообщения: 6371
Зарегистрирован: Сб янв 28, 2006 22:47:24

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

Сообщение Asmodey »

Да, так и думаю сделать. Нужно только еще пару свистков заказать, а то этот единственный пока и ковыряя его рискую остаться без отладчика. Еще есть J-Link, но у меня с ним не сложилось пока. Просто времени не было разбираться с джейлинком.

Еще вот что. Когда только "запорол" МК в поисках по гуглу наткнулся на инфу, что STM32 имеют два уровня защиты от считывания прошивки. Если я правильно понял, то защита второго уровня лочит микроконтроллер наглухо и запрещает даже стирание и перепрошивку, превращая его в одноразово программируемое устройство. Это так?
Последний раз редактировалось Asmodey Чт янв 02, 2020 20:24:07, всего редактировалось 1 раз.
Астролябия-сама меряет, было бы что мерять!!!
Аватара пользователя
afz
Опытный кот
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

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

Сообщение afz »

А я тебе сразу говорил, заказывай, хотя бы, пару. :)
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Аватара пользователя
Asmodey
Друг Кота
Сообщения: 6371
Зарегистрирован: Сб янв 28, 2006 22:47:24

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

Сообщение Asmodey »

Да у меня так получилось, что сразу на нехилую сумму всего заказал. И все равно запланированного бюджета на все не хватало, пришлось урезать свои хотелки в пользу самого необходимого. Вот и второй свисток урезался...
Астролябия-сама меряет, было бы что мерять!!!
Ответить

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