STM32 новичку в ARM что к чему
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Dimon456, то бишь документация ни о чем не говорит?
Ничего, что запись в ODR заменяет все биты? А запись в BSRR - только те, где были единички (и то, если и в BS, и в BR стоит 1, то в приоритете будет BR, как выше на картинке было отображено).
Ничего, что запись в ODR заменяет все биты? А запись в BSRR - только те, где были единички (и то, если и в BS, и в BR стоит 1, то в приоритете будет BR, как выше на картинке было отображено).
Re: STM32 новичку в ARM что к чему
Eddy_Em, то есть, если там было 10100, а я 01000, то там будет в итоге 01000?
И что, выходит у меня устаревавший куб?
И что, выходит у меня устаревавший куб?
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Dimon456, конечно! ODR == output data register, что в него запишешь, то и будет. А вот BSRR дает побитовый доступ, он модифицирует лишь нужные биты.
Кстати, для самых параноиков у некоторых чипов есть bitbang: записываешь 1 по определенному адресу, и у тебя лишь один бит в 1 устанавливается. Но это ничем не отличается от записи в BSRR (тем паче, по количеству тактов). Другое дело, что некоторые хитрожопые используют битбанг, чтобы из одного uint32_t сделать 32 независимых флага. И если обычно ты для изменения или получения значения флага должен дополнительно выполнить операцию "и" или "или", то в случае с битбангом обходится одной-единственной записью.
Лично мне этот битбанг нафиг не нужен, т.к. у STM32 такая прорва оперативы, что можно смело на каждый флаг целый uint32_t отдавать (что я зачастую и делаю). Ну, подумаешь, будет у меня на сотню-другую байт больше в оперативе занято. Все равно ее там минимум 4кБ — нафиг столько?
Кстати, для самых параноиков у некоторых чипов есть bitbang: записываешь 1 по определенному адресу, и у тебя лишь один бит в 1 устанавливается. Но это ничем не отличается от записи в BSRR (тем паче, по количеству тактов). Другое дело, что некоторые хитрожопые используют битбанг, чтобы из одного uint32_t сделать 32 независимых флага. И если обычно ты для изменения или получения значения флага должен дополнительно выполнить операцию "и" или "или", то в случае с битбангом обходится одной-единственной записью.
Лично мне этот битбанг нафиг не нужен, т.к. у STM32 такая прорва оперативы, что можно смело на каждый флаг целый uint32_t отдавать (что я зачастую и делаю). Ну, подумаешь, будет у меня на сотню-другую байт больше в оперативе занято. Все равно ее там минимум 4кБ — нафиг столько?
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: STM32 новичку в ARM что к чему
[uquote="Dimon456",url="/forum/viewtopic.php?p=4351499#p4351499"]Eddy_Em, то есть, если там было 10100, а я 01000, то там будет в итоге 01000?
И что, выходит у меня устаревавший куб?[/uquote]
У вас там XOR, а не просто запись. А на счет устаревшего - похоже на то: XOR штука неатомарная, и при должной удаче можно успешно пострелять себе в ногу. BRR / BSRR все-таки получше.
И что, выходит у меня устаревавший куб?[/uquote]
У вас там XOR, а не просто запись. А на счет устаревшего - похоже на то: XOR штука неатомарная, и при должной удаче можно успешно пострелять себе в ногу. BRR / BSRR все-таки получше.
Re: STM32 новичку в ARM что к чему
Eddy_Em, COKPOWEHEU, я не так хотел спросить, а в ногу я пострелял на AVR.
Только одно не понятно, разработчик STM32CubeMX что ни чего не знает про чип?
У меня файл C:\Users\xxxxx\STM32Cube\Repository\STM32Cube_FW_F1_V1.7.0\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c датируется 24.02.2020, это дата установки на компе STM32CubeMX, а чип создан вообще х знает когда, у меня эта плата примерно с 2011-2012 года. Это как понять? Что за 8 лет не могли правильно написать?
Только одно не понятно, разработчик STM32CubeMX что ни чего не знает про чип?
У меня файл C:\Users\xxxxx\STM32Cube\Repository\STM32Cube_FW_F1_V1.7.0\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c датируется 24.02.2020, это дата установки на компе STM32CubeMX, а чип создан вообще х знает когда, у меня эта плата примерно с 2011-2012 года. Это как понять? Что за 8 лет не могли правильно написать?
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Чип разрабатывали грамотные инженеры, а калокуб - убогие быдлокодеры!
Re: STM32 новичку в ARM что к чему
Я тебе больше скажу, что знают, но не делают.Dimon456 писал(а):Только одно не понятно, разработчик STM32CubeMX что ни чего не знает про чип?
Одалживал поиграться с USB драйвер из HAL. Был удивлён, увидев список того, что нужно дописать для обработки команд настройки виртуального СОМ-порта, но самого кода там нет. По этой причине при попытке сменить, например, скорость порта при подключенном девайсе, получишь зависание драйвера в МК. Разобраться, дописать- полчаса работы. Но CTM не доделывает это уже несколько лет. И таких падлянок много. Видел даже сайт, на котором собраны подобные косяки и даны рецепты лечения.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: STM32 новичку в ARM что к чему
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4351132#p4351132"]На Хабре, например, сравнивали скорость простейшей мигалки диодом: по сравнению с нормальным кодом медленнее в 30 раз, кажется.[/uquote]думаю, сравнивать надо корректно. digitalWrite заточена на обращение к пинам в произвольном порядке, а регистровый доступ - на групповом. однако, ардуина допускает и групповой, т.е. через порт, доступ к битам, поэтому сравнивать надо только для "произвольного доступа", например, на такой задаче: реализовать "одиночный бегущий огонь" по всем пинам платы ардуино по кругу со скоростью 1 пин в 100 мс.
я не знаток ардуины, но, вероятно, решение для этой задачи будет таким (это тело главной функции ардуины, какой-то там Loop, точно не знаю):я не знаю, какой константой общее количество пинов ардуины задано, поэтому придумал свою константу TOTAL_PIN.
вот и интересно сравнить размер (в т.ч. исходника, т.е. трудоемкость) и быстродействие кода "от правильных программистов", решающего ту же самую задачу.
я не знаток ардуины, но, вероятно, решение для этой задачи будет таким (это тело главной функции ардуины, какой-то там Loop, точно не знаю):
Код: Выделить всё
for(uint8_t p=TOTAL_PIN-1, i=0; i<TOTAL_PIN; p=i++){
digitalWrite(p, false);
digitalWrite(i, true);
uint32_t t = Millis();
while((Millis() - t) < 100) ;
}вот и интересно сравнить размер (в т.ч. исходника, т.е. трудоемкость) и быстродействие кода "от правильных программистов", решающего ту же самую задачу.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Ну что за жесть? Есть же таймер. Настраиваешь, чтобы каждые 100мс было прерывание, а в прерывании уже гасишь предыдущий и зажигаешь следующий диод. А еще проще - генерить таймером меандр, а "бегущий огонь" организовать при помощи обычного сдвигового регистра…while((Millis() - t) < 100) ;
Вот за эти "дилеи" и называю абдуринщиков болванами! Одно дело - когда ты в инициализации небольшую паузу допускаешь (скажем, десяток микросекунд, чтобы экранчик "очухался"; но в случае экрана даже инициализацию лучше на КА повесить), и другое — когда ты в рабочем коде "дилеи" фигачишь.
Я как-то видел код одного дегенерата для работы с 1-wire. Так он нет, чтобы UART или таймер использовать (с прерываниями, т.к. DMA у мелких аврок нет), а херячил паузы "дилеями"!!!
Добавлено after 4 minutes 30 seconds:
P.S. В общем случае, если мне нужно работать с произвольно разбросанными пинами как с членами единого регистра (скажем, кнопки), я завожу массив портов и пинов, а потом уже все просто. Вот так, например. Вот так выглядит КА для проверки состояния кнопок в конкретном случае. А вот так - сами массивы:
Код: Выделить всё
// Buttons: PA10, PA13, PA14, PA15, pullup (0 active)
volatile GPIO_TypeDef *BTNports[BTNSNO] = {GPIOA, GPIOA, GPIOA, GPIOA};
const uint32_t BTNpins[BTNSNO] = {1<<10, 1<<13, 1<<14, 1<<15};Re: STM32 новичку в ARM что к чему
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4351691#p4351691"]если мне нужно работать с произвольно разбросанными пинами как с членами единого регистра[/uquote]
В очередной раз сделаю отсылку к C++ и его шаблонам:
P.S. Это не продкашн-код, конечно, можно и нужно сгруппировать пины по портам и писать в регистр каждого порта единожды, можно реализовать запись значения как в порт, просто код будет объемный, а данный кусок чисто для иллюстрации.
В очередной раз сделаю отсылку к C++ и его шаблонам:
Код: Выделить всё
template<typename... Pins>
struct VirtualPort
{
void Set()
{
(Pins::Set(), ...);
}
};
using Port = VirtualPort<Pa0, Pb2, Pc13>;
Port::Set(); // Установить "1" на все
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: STM32 новичку в ARM что к чему
[uquote="Dimon456",url="/forum/viewtopic.php?p=4351626#p4351626"]Только одно не понятно, разработчик STM32CubeMX что ни чего не знает про чип?[/uquote]
Так где toggle используется помимо отладочной индикации? Просто если вся задача этой функции мигнуть диодом чтобы показать, что прерывание работает - да и плевать если пару раз не сработает.
Удобства и гибкости по сравнению с Ардуиной больше (например, можно указывать активный уровень - подключен светодиод к общему катоду или аноду, или может через транзистор). И никакого оверхеда.
Но в реальных проектах подобное требуется крайне редко. А вот дергать всякие линии CS, DC, реле и тому подобное напротив нужно постоянно.
Именно так и надо оформлять низкоприоритетные задачи, по методу конечного автомата. Еще не хватало таймер на такую ерунду тратить.
Возможно, со временем ARV перейдет на полноценный КА, который будет не тупо висеть в пустом цикле, а возвращать управление основному коду. Что-то вроде такого:
ВНИМАНИЕ: писал из головы, мог что-то пропустить.
Так где toggle используется помимо отладочной индикации? Просто если вся задача этой функции мигнуть диодом чтобы показать, что прерывание работает - да и плевать если пару раз не сработает.
Э-э-э? А можно поподробнее? А то у меня ответственная железяка на регулярную смену скорости завязана. Пока, правда, не вылетала ни разу, но мало ли, может исправлять придется.tonyk писал(а):при попытке сменить, например, скорость порта при подключенном девайсе, получишь зависание драйвера в МК.
Я ведь уже приводил свой код, также ориентированный на доступ к отдельным ножкам:ARV писал(а):думаю, сравнивать надо корректно. digitalWrite заточена на обращение к пинам в произвольном порядке
Код: Выделить всё
#define LED C,8,1,GPIO_PP50
...
GPIO_config( LED );
GPO_ON( LED );
GPO_T( LED );Не спорю, для ардуинщиков это актуальная задача. В хорошем смысле: при обучении программированию.ARV писал(а):реализовать "одиночный бегущий огонь" по всем пинам платы ардуино по кругу со скоростью 1 пин в 100 мс.
Но в реальных проектах подобное требуется крайне редко. А вот дергать всякие линии CS, DC, реле и тому подобное напротив нужно постоянно.
А еще допускает вообще отказаться от ардуиновской IDE и оставить только платку с ATmega328, которую спокойно программировать на ассемблере. Но ардуиной это называться уже не будет.ARV писал(а):ардуина допускает и групповой, т.е. через порт, доступ к битам
Отлично сделано, нечего тут!Eddy_Em писал(а):Ну что за жесть? Есть же таймер.
Именно так и надо оформлять низкоприоритетные задачи, по методу конечного автомата. Еще не хватало таймер на такую ерунду тратить.
Возможно, со временем ARV перейдет на полноценный КА, который будет не тупо висеть в пустом цикле, а возвращать управление основному коду. Что-то вроде такого:
Код: Выделить всё
char leds(){
//задержка в стиле конечного автомата: если продолжать выполнение рано, просто возвращаем управление
static int32_t t_prev = 0;
int32_t t_cur = Millis();
if( (t_cur - t_prev) < 100 )return 1;
t_prev = t_cur;
//тело функции: гасим предыдущий диод, включаем следующий. Никаких "тупых" задержек, никакого прохода по всем диодам за раз
static uint8_t led_prev = TOTAL_PIN-1;
static uint8_t led_cur = 0;
digitalWrite(led_prev, 0);
digitalWrite(led_cur, 1);
led_prev = led_cur;
led_cur++;
//проверка конца анимации. Сбрасываем счетчик в ноль и делаем return 0 чтобы вызывающая сторона поняла, что анимация закончилась
if(led_cur >= TOTAL_PIN-1){
led_cur = 0;
return 0;
}
return 1;
}У меня тоже есть подобный код для SPI и I2C чтобы тестировать на малознакомой железке. В конечном автомате внутри прерывания есть шанс запутаться, а в дубовом коде - нет.Eddy_Em писал(а):Я как-то видел код одного дегенерата для работы с 1-wire. Так он нет, чтобы UART или таймер использовать (с прерываниями, т.к. DMA у мелких аврок нет), а херячил паузы "дилеями"!!!
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: STM32 новичку в ARM что к чему
[uquote="ARV",url="/forum/viewtopic.php?p=4351681#p4351681"]реализовать "одиночный бегущий огонь" по всем пинам платы ардуино по кругу со скоростью 1 пин в 100 мс.[/uquote]
[uquote="ARV",url="/forum/viewtopic.php?p=4351681#p4351681"]вот и интересно сравнить размер (в т.ч. исходника, т.е. трудоемкость) и быстродействие кода "от правильных программистов", решающего ту же самую задачу.[/uquote]Листинг под спойлером. Размер кода и скорость выполнения видноСкорость написания кода - быстрее, чем написать этот пост. Размер библиотечного кода - большой.
Добавлено after 3 minutes 42 seconds:
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4351700#p4351700"]Так где toggle используется помимо отладочной индикации?[/uquote]Где бы он ни использовался - должен работать правильно.
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4351700#p4351700"]Я ведь уже приводил свой код, также ориентированный на доступ к отдельным ножкам:[/uquote]Он ничего общего не имеет с digitalWrite. У вас порт, пин задан на этапе компиляции, а у digitalWrite произвольный в рантайме.
Код: Выделить всё
// 64 пина GPIO
using ALL_PINS = PinList<GpioA<>, GpioB<>,GpioC<>,GpioD<>>;
void SysTick_Handler()
{
static auto counter=0;
ALL_PINS::write(1ULL<<counter);
if(counter++ == ALL_PINS::PinCount()-1) counter=0;
}Спойлер
Код: Выделить всё
//void SysTick_Handler()
//{
SysTick_Handler:
PUSH {R4-R7,LR}
// static auto counter=0;
// ALL_PINS::write(1ULL<<counter);
LDR.N R4,??DataTable1_4
LDR.N R6,??DataTable1_5
LDR R5,[R4, #+0]
MOVS R0,#+1
MOVS R1,#+0
MOV R2,R5
BL __aeabi_llsl
ASRS R2,R1,#+16
STRH R2,[R6, #+0]
STRH R1,[R6, #+1024]
ASRS R7,R0,#+16
STRH R7,[R6, #+2048]
STRH R0,[R6, #+3072]
// if(counter++ == ALL_PINS::PinCount()-1) counter=0;
ADDS R0,R5,#+1
CMP R5,#+63
IT EQ
MOVEQ R0,#+0
//}
STR R0,[R4, #+0]
POP {R4-R7,PC} Добавлено after 3 minutes 42 seconds:
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4351700#p4351700"]Так где toggle используется помимо отладочной индикации?[/uquote]Где бы он ни использовался - должен работать правильно.
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4351700#p4351700"]Я ведь уже приводил свой код, также ориентированный на доступ к отдельным ножкам:[/uquote]Он ничего общего не имеет с digitalWrite. У вас порт, пин задан на этапе компиляции, а у digitalWrite произвольный в рантайме.
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: STM32 новичку в ARM что к чему
[uquote="VladislavS",url="/forum/viewtopic.php?p=4351709#p4351709"]Он ничего общего не имеет с digitalWrite. У вас порт, пин задан на этапе компиляции, а у digitalWrite произвольный в рантайме.[/uquote]По смыслу использования ровно тоже самое. Или у вас изменение номера пина в рантайме типичная задача?
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: STM32 новичку в ARM что к чему
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4351723#p4351723"]По смыслу использования ровно тоже самое.[/uquote]Нет. Сделайте из своего макроса бегущий огонь по разным пинам разных портов и всё поймёте.
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4351723#p4351723"]Или у вас изменение номера пина в рантайме типичная задача?[/uquote]Да какая разница типовая или нет. Это другая задача.
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4351723#p4351723"]Или у вас изменение номера пина в рантайме типичная задача?[/uquote]Да какая разница типовая или нет. Это другая задача.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: STM32 новичку в ARM что к чему
VladislavS, единственное, что я не понял в вашем коде, так это где 100 мс? или у вас SysTick делается каждые 100 мс?
ваш подход с шаблонами для пинов меня поразил давно, но, поскольку С++ для меня все равно остаётся недоступным, увы, применять его не могу... но в целом, впечатлен. тут скорее был бы любопытен код от Eddy_Em, как более одиозного программиста-фанатика
Добавлено after 3 minutes 26 seconds:
и еще: листинг в данном контексте сравнения не показатель, т.к. сравнивать следует на одной и той же платформе ардуины общий размер полученной прошивки. т.е. если у вас листинг ARM-а, то надо собрать ваш код целиком на платформе ARM-Arduino, и на той же платформе мой вариант, и тогда уж сравнивать. или для AVR аналогично.
Добавлено after 1 minute 49 seconds:
ваш подход с шаблонами для пинов меня поразил давно, но, поскольку С++ для меня все равно остаётся недоступным, увы, применять его не могу... но в целом, впечатлен. тут скорее был бы любопытен код от Eddy_Em, как более одиозного программиста-фанатика
Добавлено after 3 minutes 26 seconds:
и еще: листинг в данном контексте сравнения не показатель, т.к. сравнивать следует на одной и той же платформе ардуины общий размер полученной прошивки. т.е. если у вас листинг ARM-а, то надо собрать ваш код целиком на платформе ARM-Arduino, и на той же платформе мой вариант, и тогда уж сравнивать. или для AVR аналогично.
Добавлено after 1 minute 49 seconds:
вообще-то, это даже обидно... мы ведь с вами не первый раз дискутируем, и по идее вы должны мало-мало иметь представление о моих реальных способностях...COKPOWEHEU писал(а):Возможно, со временем ARV перейдет на полноценный КА, который будет не тупо висеть в пустом цикле, а возвращать управление основному коду
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: STM32 новичку в ARM что к чему
[uquote="ARV",url="/forum/viewtopic.php?p=4351739#p4351739"]или у вас SysTick делается каждые 100 мс?[/uquote]Совершенно верно. Сделано это аппаратным или программным таймером - дело десятое. Главное, что кроме "бегущего огня" контроллер 99% времени свободен для других задач.
[uquote="ARV",url="/forum/viewtopic.php?p=4351739#p4351739"]т.к. сравнивать следует на одной и той же платформе ардуины общий размер полученной прошивки.[/uquote]Мне не очень интересна эта "пиписькометрия", так как я знаю во что выльется мой код на разных контроллерах (на AVR тоже) при разных входных параметрах.
[uquote="ARV",url="/forum/viewtopic.php?p=4351739#p4351739"]т.к. сравнивать следует на одной и той же платформе ардуины общий размер полученной прошивки.[/uquote]Мне не очень интересна эта "пиписькометрия", так как я знаю во что выльется мой код на разных контроллерах (на AVR тоже) при разных входных параметрах.
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: STM32 новичку в ARM что к чему
[uquote="VladislavS",url="/forum/viewtopic.php?p=4351732#p4351732"][uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4351723#p4351723"]По смыслу использования ровно тоже самое.[/uquote]Нет. Сделайте из своего макроса бегущий огонь по разным пинам разных портов и всё поймёте.[/uquote]
Да. Потому что ненужную функциональность я, в отличие от разработчиков ардуины не реализовывал.
Ну а на счет бегущего огня - простого способа сделать это через макросы я не вижу, придется извращаться с адресами битов и масками, то есть реализовывать тот же digitalWrite, что мне делать, разумеется, лень. Кстати, и ваши шаблоны не будут столь эффективны, если решать именно ту задачу, что вам дали - последовательный перебор ножек. Они даже на корпусе вразнобой идут, не то что на плате. Взять хотя бы stm32f103: PC13, PC14, PC15, PD0, PD1, PA0 - PA7, PB0, PB1, PB2, PB10 - PB15, PA8-PA15, PB3 - PB9.
[uquote="VladislavS",url="/forum/viewtopic.php?p=4351732#p4351732"][uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4351723#p4351723"]Или у вас изменение номера пина в рантайме типичная задача?[/uquote]Да какая разница типовая или нет. Это другая задача.[/uquote]
Это та практическая задача, которую они пытались решить, но переборщили с универсальностью.
Да. Потому что ненужную функциональность я, в отличие от разработчиков ардуины не реализовывал.
Ну а на счет бегущего огня - простого способа сделать это через макросы я не вижу, придется извращаться с адресами битов и масками, то есть реализовывать тот же digitalWrite, что мне делать, разумеется, лень. Кстати, и ваши шаблоны не будут столь эффективны, если решать именно ту задачу, что вам дали - последовательный перебор ножек. Они даже на корпусе вразнобой идут, не то что на плате. Взять хотя бы stm32f103: PC13, PC14, PC15, PD0, PD1, PA0 - PA7, PB0, PB1, PB2, PB10 - PB15, PA8-PA15, PB3 - PB9.
[uquote="VladislavS",url="/forum/viewtopic.php?p=4351732#p4351732"][uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4351723#p4351723"]Или у вас изменение номера пина в рантайме типичная задача?[/uquote]Да какая разница типовая или нет. Это другая задача.[/uquote]
Это та практическая задача, которую они пытались решить, но переборщили с универсальностью.
В смысле?! Не хотите же вы сказать, что не осилите такую вещь, как конечный автомат. Научиться можно чему угодно, хватило бы мотивации.ARV писал(а):вообще-то, это даже обидно... мы ведь с вами не первый раз дискутируем, и по идее вы должны мало-мало иметь представление о моих реальных способностях...
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: STM32 новичку в ARM что к чему
я вам как бы намекнул, что КА мне осиливать не нужно, т.к. я его давно прожевал, переварил и высрал. всё ж не первый год программирую, и не один проект даже на этом сайте мной опубликован...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: STM32 новичку в ARM что к чему
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4351756#p4351756"]Кстати, и ваши шаблоны не будут столь эффективны, если решать именно ту задачу, что вам дали - последовательный перебор ножек.[/uquote]
Позволю себе встрять в дискуссию, шаблонам абсолютно все равно, в каком порядке ножки, потому что при компиляции запись в такой виртуальный порт разворачивается в запись значения в регистр конкретного порта (пусть в BSRR), так что эффективнее, наверно, уже некуда.
Позволю себе встрять в дискуссию, шаблонам абсолютно все равно, в каком порядке ножки, потому что при компиляции запись в такой виртуальный порт разворачивается в запись значения в регистр конкретного порта (пусть в BSRR), так что эффективнее, наверно, уже некуда.
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: STM32 новичку в ARM что к чему
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4351756#p4351756"]Да. Потому что ненужную функциональность я, в отличие от разработчиков ардуины не реализовывал.[/uquote]Таки да, или функционал не реализован (нет)? И можно сразу весь список "ненужных задач"?
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4351756#p4351756"]Кстати, и ваши шаблоны не будут столь эффективны, если решать именно ту задачу, что вам дали - последовательный перебор ножек.[/uquote]Чудес не бывает. На разбросанных ножках кода будет больше, но он будет достаточно оптимальным для поставленной задачи. А главное, от программиста потребуется просто указать список и всё. Остальное - дело компилятора.
Добавлено after 5 minutes 10 seconds:
[uquote="azhel12",url="/forum/viewtopic.php?p=4351767#p4351767"]Позволю себе встрять в дискуссию, шаблонам абсолютно все равно, в каком порядке ножки,[/uquote]Не всё равно, в какой порт какой бит писать надо вычислить. При сильном замесе кода будет много.
[uquote="azhel12",url="/forum/viewtopic.php?p=4351767#p4351767"]так что эффективнее, наверно, уже некуда.[/uquote]Есть, конечно. Конкретную задачу завсегда можно решить эффективней специальным кодом, нежели универсальным.
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4351756#p4351756"]Кстати, и ваши шаблоны не будут столь эффективны, если решать именно ту задачу, что вам дали - последовательный перебор ножек.[/uquote]Чудес не бывает. На разбросанных ножках кода будет больше, но он будет достаточно оптимальным для поставленной задачи. А главное, от программиста потребуется просто указать список и всё. Остальное - дело компилятора.
Добавлено after 5 minutes 10 seconds:
[uquote="azhel12",url="/forum/viewtopic.php?p=4351767#p4351767"]Позволю себе встрять в дискуссию, шаблонам абсолютно все равно, в каком порядке ножки,[/uquote]Не всё равно, в какой порт какой бит писать надо вычислить. При сильном замесе кода будет много.
[uquote="azhel12",url="/forum/viewtopic.php?p=4351767#p4351767"]так что эффективнее, наверно, уже некуда.[/uquote]Есть, конечно. Конкретную задачу завсегда можно решить эффективней специальным кодом, нежели универсальным.