Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

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

Ср дек 18, 2019 14:27:37

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

Ну и интересно, каковы накладные расходы на хранение такого рода списка пинов. То, что они быстро работают, мы уже поняли, но интересно, сколько flash/ram памяти на них уходит.

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

Ср дек 18, 2019 14:30:46

Проверил скорость вех вариантов.
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);

получим

Однако запись можно совместить и получить такой вариант:
Код:
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();
}

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

Ср дек 18, 2019 14:35:41

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

Код:
*((volatile uint8_t *)&GPIOB->ODR +1) = (__RBIT(GPIOB->IDR)>>24);


Ну и интересно, каковы накладные расходы на хранение такого рода списка пинов. То, что они быстро работают, мы уже поняли, но интересно, сколько flash/ram памяти на них уходит.
Ноль целых, хрен десятых. Я же привёл листинг. Это ВСЁ!!! Они обрабатываются на этапе компиляции.
Последний раз редактировалось VladislavS Ср дек 18, 2019 15:19:47, всего редактировалось 1 раз.

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

Ср дек 18, 2019 14:43:50

А есть какой-нибудь репозиторий на github, чтобы взглянуть, как эти шаблоны реализованы?

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

Ср дек 18, 2019 18:24:51

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

Как написать на С Ваше выражение?

Там по листингу видно, что вместо 0xFF00'0000 используется 0xFFA0'0000, т.е. дополнительно сбрасываются в 0 WR и DC. Будет одна запись в BSRR вместо трех.

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

Ср дек 18, 2019 19:51:48

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

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

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

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

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

Ср дек 18, 2019 21:23:49

Попробуй запустить с нажатым Ресетом. Код чужой прошивки, естественно, работает неправильно и, похоже, отключает что-то из отладочных средств, из-за чего ST-link перестает работать. Запуск с Ресета позволит запустить ST-link, не выполнив ни одного байта из кода чужой прошивки.

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

Чт дек 19, 2019 12:11:29

Перенес ногу 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

Получился самый быстрый код.

Значение DC скорее всего защелкивается вместе с данными по фронту WR, если DC и WR устанавливать одновременно, то мы опять возвращаемся к тому с чего начали, т.е. неопределенному поведению. Поменяется частота или длина проводов и уже может начать глючить, хотя весьма вероятно оно изредка глючит уже сейчас.

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

Чт дек 19, 2019 12:55:11

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

Зато как быстро глючит :)

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

Чт дек 19, 2019 12:57:28

DC устанавливается с задержкой 22 наносекунды от WR. Сбрасывается через 2. Визуально помех пока не обнаружил.Будут помехи - разделю установку.

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

Чт дек 19, 2019 13:03:09

DC устанавливается с задержкой 22 наносекунды от WR. Сбрасывается через 2. Визуально помех пока не обнаружил.Будут помехи - разделю установку.

Насколько совмещенная установка влияет на производительность учитывая, что в основном на дисплей передаются данные для которых дергать DC не нужно? Думаю разницы практически не будет. Например, выводим символ 8*12, это 192 байта данных цветов плюс 4 или 8 данных координат окна, итого 200 байт против 3 для работы с регистрами которые будут на треть медленнее. Заметное замедление будет наблюдаться только если задавать координаты для каждой выводимой точки, иначе разница должны быть меньше процента.
Последний раз редактировалось Reflector Чт дек 19, 2019 13:18:16, всего редактировалось 1 раз.

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

Чт дек 19, 2019 13:14:40

Что-то тут не так. Надо первой командой устанавливать: WR=0, нужное значение DC и Data(Cmd). Второй командой ставить WR=1, а остальное пусть остаётся старое. Так без всяких линий задержки должно работать.

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

Чт дек 19, 2019 13:27:13

Что-то тут не так. Надо первой командой устанавливать: WR=0, нужное значение DC и Data(Cmd). Второй командой ставить WR=1, а остальное пусть остаётся старое. Так без всяких линий задержки должно работать.

Кстати да, по скорости так действительно лучше будет, главное потом не забыть сбросить DC если захочется передавать данные при помощи DMA :)

ps. Но у себя так не буду делать, потому что не использую F1 и быстрее будет писать только данные в половинку порта, а DC сбрасывать при значительно более редких обращениях к регистрам дисплея.

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

Чт янв 02, 2020 17:11:51

Попробуй запустить с нажатым Ресетом. Код чужой прошивки, естественно, работает неправильно и, похоже, отключает что-то из отладочных средств, из-за чего ST-link перестает работать. Запуск с Ресета позволит запустить ST-link, не выполнив ни одного байта из кода чужой прошивки.

Только сейчас дошли руки до макетки с этим МК. Замутил ресет, МК тут же определился, стерся и зашился по новой правильной прошивкой. afz, спасибо. Нужно ST-Link_ом с линией NRST для STM32 обзавестись.

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

Чт янв 02, 2020 20:01:37

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

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

Чт янв 02, 2020 20:13:35

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

Еще вот что. Когда только "запорол" МК в поисках по гуглу наткнулся на инфу, что STM32 имеют два уровня защиты от считывания прошивки. Если я правильно понял, то защита второго уровня лочит микроконтроллер наглухо и запрещает даже стирание и перепрошивку, превращая его в одноразово программируемое устройство. Это так?
Последний раз редактировалось Asmodey Чт янв 02, 2020 20:24:07, всего редактировалось 1 раз.

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

Чт янв 02, 2020 20:23:25

А я тебе сразу говорил, заказывай, хотя бы, пару. :)

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

Чт янв 02, 2020 20:25:55

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