Страница 301 из 446
Re: STM32 новичку в ARM что к чему
Добавлено: Ср дек 18, 2019 14:27:37
WiseLord
А теперь сделайте этот же коронный номер на C, пожалуйста.
Ну и интересно, каковы накладные расходы на хранение такого рода списка пинов. То, что они быстро работают, мы уже поняли, но интересно, сколько flash/ram памяти на них уходит.
Re: STM32 новичку в ARM что к чему
Добавлено: Ср дек 18, 2019 14:30:46
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]
Re: STM32 новичку в ARM что к чему
Добавлено: Ср дек 18, 2019 14:35:41
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]Ноль целых, хрен десятых. Я же привёл листинг. Это ВСЁ!!! Они обрабатываются на этапе компиляции.
Re: STM32 новичку в ARM что к чему
Добавлено: Ср дек 18, 2019 14:43:50
WiseLord
А есть какой-нибудь репозиторий на github, чтобы взглянуть, как эти шаблоны реализованы?
Re: STM32 новичку в ARM что к чему
Добавлено: Ср дек 18, 2019 18:24:51
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]
Как написать на С Ваше выражение?
Re: STM32 новичку в ARM что к чему
Добавлено: Ср дек 18, 2019 18:57:29
Reflector
[uquote="Sergi",url="/forum/viewtopic.php?p=3758319#p3758319"]Как написать на С Ваше выражение?[/uquote]
Там по листингу видно, что вместо 0xFF00'0000 используется 0xFFA0'0000, т.е. дополнительно сбрасываются в 0 WR и DC. Будет одна запись в BSRR вместо трех.
Re: STM32 новичку в ARM что к чему
Добавлено: Ср дек 18, 2019 19:51:48
Asmodey
Какие страшные вещи вы тут обсуждаете, в теме для новичков. Аж мороз по коже...
У меня все проще, STM32F303BC стала не видна после случайной попытки изнасилования прошивкой для F103 из кейла дебагером ST-Link. Не видна не в утилите ST-Link, ни в IAR. При попытке приконнектится к микроконтроллеру вылезают сообщения об отсутствии целевого устройства. Это теперь навсегда или можно как-то исправить?
Попробовать через usart ее почистить? Но, вроде как для запуска загрузчика нужно ноги boot подтянуть и притянуть на плюс-минус питания? Reset обязательно нужно к чему-то подключить?
ПЫСЫ. До того МК определялся в утилите ST-Link как STM32F302/303. А после того как потыкался в него из кайла, космика и еще чего-то, пропал МК из виду. Есть еще микроконтроллеры, но перепаивать переходную плату, да потом снова запороть микроконтроллер очень не хотелось бы.
Re: STM32 новичку в ARM что к чему
Добавлено: Ср дек 18, 2019 21:23:49
afz
Попробуй запустить с нажатым Ресетом. Код чужой прошивки, естественно, работает неправильно и, похоже, отключает что-то из отладочных средств, из-за чего ST-link перестает работать. Запуск с Ресета позволит запустить ST-link, не выполнив ни одного байта из кода чужой прошивки.
Re: STM32 новичку в ARM что к чему
Добавлено: Чт дек 19, 2019 12:11:29
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]
Получился самый быстрый код.
Re: STM32 новичку в ARM что к чему
Добавлено: Чт дек 19, 2019 12:43:54
Reflector
[uquote="Sergi",url="/forum/viewtopic.php?p=3758809#p3758809"]Получился самый быстрый код.[/uquote]
Значение DC скорее всего защелкивается вместе с данными по фронту WR, если DC и WR устанавливать одновременно, то мы опять возвращаемся к тому с чего начали, т.е. неопределенному поведению. Поменяется частота или длина проводов и уже может начать глючить, хотя весьма вероятно оно изредка глючит уже сейчас.
Re: STM32 новичку в ARM что к чему
Добавлено: Чт дек 19, 2019 12:55:11
VladislavS
То есть, если что и задерживать, то как раз WR.
Зато как быстро глючит

Re: STM32 новичку в ARM что к чему
Добавлено: Чт дек 19, 2019 12:57:28
Sergi
DC устанавливается с задержкой 22 наносекунды от WR. Сбрасывается через 2. Визуально помех пока не обнаружил.Будут помехи - разделю установку.
Re: STM32 новичку в ARM что к чему
Добавлено: Чт дек 19, 2019 13:03:09
Reflector
[uquote="Sergi",url="/forum/viewtopic.php?p=3758834#p3758834"]DC устанавливается с задержкой 22 наносекунды от WR. Сбрасывается через 2. Визуально помех пока не обнаружил.Будут помехи - разделю установку.[/uquote]
Насколько совмещенная установка влияет на производительность учитывая, что в основном на дисплей передаются данные для которых дергать DC не нужно? Думаю разницы практически не будет. Например, выводим символ 8*12, это 192 байта данных цветов плюс 4 или 8 данных координат окна, итого 200 байт против 3 для работы с регистрами которые будут на треть медленнее. Заметное замедление будет наблюдаться только если задавать координаты для каждой выводимой точки, иначе разница должны быть меньше процента.
Re: STM32 новичку в ARM что к чему
Добавлено: Чт дек 19, 2019 13:14:40
VladislavS
Что-то тут не так. Надо первой командой устанавливать: WR=0, нужное значение DC и Data(Cmd). Второй командой ставить WR=1, а остальное пусть остаётся старое. Так без всяких линий задержки должно работать.
Re: STM32 новичку в ARM что к чему
Добавлено: Чт дек 19, 2019 13:27:13
Reflector
[uquote="VladislavS",url="/forum/viewtopic.php?p=3758855#p3758855"]Что-то тут не так. Надо первой командой устанавливать: WR=0, нужное значение DC и Data(Cmd). Второй командой ставить WR=1, а остальное пусть остаётся старое. Так без всяких линий задержки должно работать.[/uquote]
Кстати да, по скорости так действительно лучше будет, главное потом не забыть сбросить DC если захочется передавать данные при помощи DMA
ps. Но у себя так не буду делать, потому что не использую F1 и быстрее будет писать только данные в половинку порта, а DC сбрасывать при значительно более редких обращениях к регистрам дисплея.
Re: STM32 новичку в ARM что к чему
Добавлено: Чт янв 02, 2020 17:11:51
Asmodey
[uquote="afz",url="/forum/viewtopic.php?p=3758451#p3758451"]Попробуй запустить с нажатым Ресетом. Код чужой прошивки, естественно, работает неправильно и, похоже, отключает что-то из отладочных средств, из-за чего ST-link перестает работать. Запуск с Ресета позволит запустить ST-link, не выполнив ни одного байта из кода чужой прошивки.[/uquote]
Только сейчас дошли руки до макетки с этим МК. Замутил ресет, МК тут же определился, стерся и зашился по новой правильной прошивкой. afz, спасибо. Нужно ST-Link_ом с линией NRST для STM32 обзавестись.
Re: STM32 новичку в ARM что к чему
Добавлено: Чт янв 02, 2020 20:01:37
afz
Asmodey,
вот так можно доработать обычный китайский ST-link. Там, правда, предлагают отсоединять "лишние" (продублированные) ноги +3.3 и +5В, а я, по-простому, откинул ноги для STM8 (как бы не те, которые автор этого материала использовал первоначально). И еще момент. Совсем тонкий МГТФ (там у него, как бы, не МГТФ 0.03) сейчас хрен найдешь, я, по-простому, воспользовался обычным обмоточным проводом в эмалевой изоляции - мне попался под руку ПЭТВ-F 0.2, но это, сам понимаешь, некритично. Дополнительный плюс - МГТФ - многожилка, которая норовит разползтись при пайке на вывод SMD-компонента, а обмоточный провод сплошной...
Re: STM32 новичку в ARM что к чему
Добавлено: Чт янв 02, 2020 20:13:35
Asmodey
Да, так и думаю сделать. Нужно только еще пару свистков заказать, а то этот единственный пока и ковыряя его рискую остаться без отладчика. Еще есть J-Link, но у меня с ним не сложилось пока. Просто времени не было разбираться с джейлинком.
Еще вот что. Когда только "запорол" МК в поисках по гуглу наткнулся на инфу, что STM32 имеют два уровня защиты от считывания прошивки. Если я правильно понял, то защита второго уровня лочит микроконтроллер наглухо и запрещает даже стирание и перепрошивку, превращая его в одноразово программируемое устройство. Это так?
Re: STM32 новичку в ARM что к чему
Добавлено: Чт янв 02, 2020 20:23:25
afz
А я тебе сразу говорил, заказывай, хотя бы, пару.

Re: STM32 новичку в ARM что к чему
Добавлено: Чт янв 02, 2020 20:25:55
Asmodey
Да у меня так получилось, что сразу на нехилую сумму всего заказал. И все равно запланированного бюджета на все не хватало, пришлось урезать свои хотелки в пользу самого необходимого. Вот и второй свисток урезался...