STM32 новичку в ARM что к чему
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: STM32 новичку в ARM что к чему
А теперь сделайте этот же коронный номер на C, пожалуйста.
Ну и интересно, каковы накладные расходы на хранение такого рода списка пинов. То, что они быстро работают, мы уже поняли, но интересно, сколько flash/ram памяти на них уходит.
Ну и интересно, каковы накладные расходы на хранение такого рода списка пинов. То, что они быстро работают, мы уже поняли, но интересно, сколько flash/ram памяти на них уходит.
- Реклама
Re: STM32 новичку в ARM что к чему
[uquote="Sergi",url="/forum/viewtopic.php?p=3758000#p3758000"]Проверил скорость вех вариантов.
BSRR победил как всегда
[/uquote]
У тебя задействованы не все оптимизации, если данные, WR и DC будут на одном порту, то для кода
получим
Однако запись можно совместить и получить такой вариант:
BSRR победил как всегда
У тебя задействованы не все оптимизации, если данные, 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 что к чему
[uquote="WiseLord",url="/forum/viewtopic.php?p=3758189#p3758189"]А теперь сделайте этот же коронный номер на C, пожалуйста.[/uquote]
[uquote="WiseLord",url="/forum/viewtopic.php?p=3758189#p3758189"]Ну и интересно, каковы накладные расходы на хранение такого рода списка пинов. То, что они быстро работают, мы уже поняли, но интересно, сколько flash/ram памяти на них уходит.[/uquote]Ноль целых, хрен десятых. Я же привёл листинг. Это ВСЁ!!! Они обрабатываются на этапе компиляции.
Код: Выделить всё
*((volatile uint8_t *)&GPIOB->ODR +1) = (__RBIT(GPIOB->IDR)>>24);
Последний раз редактировалось VladislavS Ср дек 18, 2019 15:19:47, всего редактировалось 1 раз.
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: STM32 новичку в ARM что к чему
А есть какой-нибудь репозиторий на github, чтобы взглянуть, как эти шаблоны реализованы?
Re: STM32 новичку в ARM что к чему
2 Reflector
Я пишу на С и там с -O3 получается так
Как написать на С Ваше выражение?
Я пишу на С и там с -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]
- Реклама
Re: STM32 новичку в ARM что к чему
[uquote="Sergi",url="/forum/viewtopic.php?p=3758319#p3758319"]Как написать на С Ваше выражение?[/uquote]
Там по листингу видно, что вместо 0xFF00'0000 используется 0xFFA0'0000, т.е. дополнительно сбрасываются в 0 WR и DC. Будет одна запись в BSRR вместо трех.
Там по листингу видно, что вместо 0xFF00'0000 используется 0xFFA0'0000, т.е. дополнительно сбрасываются в 0 WR и DC. Будет одна запись в BSRR вместо трех.
Re: STM32 новичку в ARM что к чему
Какие страшные вещи вы тут обсуждаете, в теме для новичков. Аж мороз по коже...
У меня все проще, STM32F303BC стала не видна после случайной попытки изнасилования прошивкой для F103 из кейла дебагером ST-Link. Не видна не в утилите ST-Link, ни в IAR. При попытке приконнектится к микроконтроллеру вылезают сообщения об отсутствии целевого устройства. Это теперь навсегда или можно как-то исправить?
Попробовать через usart ее почистить? Но, вроде как для запуска загрузчика нужно ноги boot подтянуть и притянуть на плюс-минус питания? Reset обязательно нужно к чему-то подключить?
ПЫСЫ. До того МК определялся в утилите ST-Link как STM32F302/303. А после того как потыкался в него из кайла, космика и еще чего-то, пропал МК из виду. Есть еще микроконтроллеры, но перепаивать переходную плату, да потом снова запороть микроконтроллер очень не хотелось бы.
У меня все проще, 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 что к чему
Попробуй запустить с нажатым Ресетом. Код чужой прошивки, естественно, работает неправильно и, похоже, отключает что-то из отладочных средств, из-за чего ST-link перестает работать. Запуск с Ресета позволит запустить ST-link, не выполнив ни одного байта из кода чужой прошивки.
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Re: STM32 новичку в ARM что к чему
Перенес ногу 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]
Re: STM32 новичку в ARM что к чему
[uquote="Sergi",url="/forum/viewtopic.php?p=3758809#p3758809"]Получился самый быстрый код.[/uquote]
Значение DC скорее всего защелкивается вместе с данными по фронту WR, если DC и WR устанавливать одновременно, то мы опять возвращаемся к тому с чего начали, т.е. неопределенному поведению. Поменяется частота или длина проводов и уже может начать глючить, хотя весьма вероятно оно изредка глючит уже сейчас.
Значение DC скорее всего защелкивается вместе с данными по фронту WR, если DC и WR устанавливать одновременно, то мы опять возвращаемся к тому с чего начали, т.е. неопределенному поведению. Поменяется частота или длина проводов и уже может начать глючить, хотя весьма вероятно оно изредка глючит уже сейчас.
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: STM32 новичку в ARM что к чему
То есть, если что и задерживать, то как раз WR.
Зато как быстро глючит
Зато как быстро глючит
Re: STM32 новичку в ARM что к чему
DC устанавливается с задержкой 22 наносекунды от WR. Сбрасывается через 2. Визуально помех пока не обнаружил.Будут помехи - разделю установку.
Re: STM32 новичку в ARM что к чему
[uquote="Sergi",url="/forum/viewtopic.php?p=3758834#p3758834"]DC устанавливается с задержкой 22 наносекунды от WR. Сбрасывается через 2. Визуально помех пока не обнаружил.Будут помехи - разделю установку.[/uquote]
Насколько совмещенная установка влияет на производительность учитывая, что в основном на дисплей передаются данные для которых дергать DC не нужно? Думаю разницы практически не будет. Например, выводим символ 8*12, это 192 байта данных цветов плюс 4 или 8 данных координат окна, итого 200 байт против 3 для работы с регистрами которые будут на треть медленнее. Заметное замедление будет наблюдаться только если задавать координаты для каждой выводимой точки, иначе разница должны быть меньше процента.
Насколько совмещенная установка влияет на производительность учитывая, что в основном на дисплей передаются данные для которых дергать 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 что к чему
Что-то тут не так. Надо первой командой устанавливать: WR=0, нужное значение DC и Data(Cmd). Второй командой ставить WR=1, а остальное пусть остаётся старое. Так без всяких линий задержки должно работать.
Re: STM32 новичку в ARM что к чему
[uquote="VladislavS",url="/forum/viewtopic.php?p=3758855#p3758855"]Что-то тут не так. Надо первой командой устанавливать: WR=0, нужное значение DC и Data(Cmd). Второй командой ставить WR=1, а остальное пусть остаётся старое. Так без всяких линий задержки должно работать.[/uquote]
Кстати да, по скорости так действительно лучше будет, главное потом не забыть сбросить DC если захочется передавать данные при помощи DMA
ps. Но у себя так не буду делать, потому что не использую F1 и быстрее будет писать только данные в половинку порта, а DC сбрасывать при значительно более редких обращениях к регистрам дисплея.
Кстати да, по скорости так действительно лучше будет, главное потом не забыть сбросить DC если захочется передавать данные при помощи DMA
ps. Но у себя так не буду делать, потому что не использую F1 и быстрее будет писать только данные в половинку порта, а DC сбрасывать при значительно более редких обращениях к регистрам дисплея.
Re: STM32 новичку в ARM что к чему
[uquote="afz",url="/forum/viewtopic.php?p=3758451#p3758451"]Попробуй запустить с нажатым Ресетом. Код чужой прошивки, естественно, работает неправильно и, похоже, отключает что-то из отладочных средств, из-за чего ST-link перестает работать. Запуск с Ресета позволит запустить ST-link, не выполнив ни одного байта из кода чужой прошивки.[/uquote]
Только сейчас дошли руки до макетки с этим МК. Замутил ресет, МК тут же определился, стерся и зашился по новой правильной прошивкой. afz, спасибо. Нужно ST-Link_ом с линией NRST для STM32 обзавестись.
Только сейчас дошли руки до макетки с этим МК. Замутил ресет, МК тут же определился, стерся и зашился по новой правильной прошивкой. afz, спасибо. Нужно ST-Link_ом с линией NRST для STM32 обзавестись.
Астролябия-сама меряет, было бы что мерять!!!
- afz
- Опытный кот
- Сообщения: 744
- Зарегистрирован: Сб дек 22, 2012 08:17:42
- Откуда: Караганда, Казахстан
Re: STM32 новичку в ARM что к чему
Asmodey, вот так можно доработать обычный китайский ST-link. Там, правда, предлагают отсоединять "лишние" (продублированные) ноги +3.3 и +5В, а я, по-простому, откинул ноги для STM8 (как бы не те, которые автор этого материала использовал первоначально). И еще момент. Совсем тонкий МГТФ (там у него, как бы, не МГТФ 0.03) сейчас хрен найдешь, я, по-простому, воспользовался обычным обмоточным проводом в эмалевой изоляции - мне попался под руку ПЭТВ-F 0.2, но это, сам понимаешь, некритично. Дополнительный плюс - МГТФ - многожилка, которая норовит разползтись при пайке на вывод SMD-компонента, а обмоточный провод сплошной...
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Re: STM32 новичку в ARM что к чему
Да, так и думаю сделать. Нужно только еще пару свистков заказать, а то этот единственный пока и ковыряя его рискую остаться без отладчика. Еще есть J-Link, но у меня с ним не сложилось пока. Просто времени не было разбираться с джейлинком.
Еще вот что. Когда только "запорол" МК в поисках по гуглу наткнулся на инфу, что STM32 имеют два уровня защиты от считывания прошивки. Если я правильно понял, то защита второго уровня лочит микроконтроллер наглухо и запрещает даже стирание и перепрошивку, превращая его в одноразово программируемое устройство. Это так?
Еще вот что. Когда только "запорол" МК в поисках по гуглу наткнулся на инфу, что STM32 имеют два уровня защиты от считывания прошивки. Если я правильно понял, то защита второго уровня лочит микроконтроллер наглухо и запрещает даже стирание и перепрошивку, превращая его в одноразово программируемое устройство. Это так?
Последний раз редактировалось Asmodey Чт янв 02, 2020 20:24:07, всего редактировалось 1 раз.
Астролябия-сама меряет, было бы что мерять!!!
- afz
- Опытный кот
- Сообщения: 744
- Зарегистрирован: Сб дек 22, 2012 08:17:42
- Откуда: Караганда, Казахстан
Re: STM32 новичку в ARM что к чему
А я тебе сразу говорил, заказывай, хотя бы, пару. 
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Re: STM32 новичку в ARM что к чему
Да у меня так получилось, что сразу на нехилую сумму всего заказал. И все равно запланированного бюджета на все не хватало, пришлось урезать свои хотелки в пользу самого необходимого. Вот и второй свисток урезался...
Астролябия-сама меряет, было бы что мерять!!!


