Страница 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
Да у меня так получилось, что сразу на нехилую сумму всего заказал. И все равно запланированного бюджета на все не хватало, пришлось урезать свои хотелки в пользу самого необходимого. Вот и второй свисток урезался...