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

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

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

Сообщение Eddy_Em »

Dimon456, то бишь документация ни о чем не говорит?
Ничего, что запись в ODR заменяет все биты? А запись в BSRR - только те, где были единички (и то, если и в BS, и в BR стоит 1, то в приоритете будет BR, как выше на картинке было отображено).
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

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

Сообщение Dimon456 »

Eddy_Em, то есть, если там было 10100, а я 01000, то там будет в итоге 01000?
И что, выходит у меня устаревавший куб?
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

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

Сообщение Eddy_Em »

Dimon456, конечно! ODR == output data register, что в него запишешь, то и будет. А вот BSRR дает побитовый доступ, он модифицирует лишь нужные биты.
Кстати, для самых параноиков у некоторых чипов есть bitbang: записываешь 1 по определенному адресу, и у тебя лишь один бит в 1 устанавливается. Но это ничем не отличается от записи в BSRR (тем паче, по количеству тактов). Другое дело, что некоторые хитрожопые используют битбанг, чтобы из одного uint32_t сделать 32 независимых флага. И если обычно ты для изменения или получения значения флага должен дополнительно выполнить операцию "и" или "или", то в случае с битбангом обходится одной-единственной записью.
Лично мне этот битбанг нафиг не нужен, т.к. у STM32 такая прорва оперативы, что можно смело на каждый флаг целый uint32_t отдавать (что я зачастую и делаю). Ну, подумаешь, будет у меня на сотню-другую байт больше в оперативе занято. Все равно ее там минимум 4кБ — нафиг столько?
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

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

Сообщение COKPOWEHEU »

[uquote="Dimon456",url="/forum/viewtopic.php?p=4351499#p4351499"]Eddy_Em, то есть, если там было 10100, а я 01000, то там будет в итоге 01000?
И что, выходит у меня устаревавший куб?[/uquote]
У вас там XOR, а не просто запись. А на счет устаревшего - похоже на то: XOR штука неатомарная, и при должной удаче можно успешно пострелять себе в ногу. BRR / BSRR все-таки получше.
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

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

Сообщение Dimon456 »

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 лет не могли правильно написать?
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

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

Сообщение Eddy_Em »

Чип разрабатывали грамотные инженеры, а калокуб - убогие быдлокодеры!
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
tonyk
Это не хвост, это антенна
Сообщения: 1309
Зарегистрирован: Вт ноя 19, 2019 06:10:18

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

Сообщение tonyk »

Dimon456 писал(а):Только одно не понятно, разработчик STM32CubeMX что ни чего не знает про чип?
Я тебе больше скажу, что знают, но не делают.
Одалживал поиграться с USB драйвер из HAL. Был удивлён, увидев список того, что нужно дописать для обработки команд настройки виртуального СОМ-порта, но самого кода там нет. По этой причине при попытке сменить, например, скорость порта при подключенном девайсе, получишь зависание драйвера в МК. Разобраться, дописать- полчаса работы. Но CTM не доделывает это уже несколько лет. И таких падлянок много. Видел даже сайт, на котором собраны подобные косяки и даны рецепты лечения.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4351132#p4351132"]На Хабре, например, сравнивали скорость простейшей мигалки диодом: по сравнению с нормальным кодом медленнее в 30 раз, кажется.[/uquote]думаю, сравнивать надо корректно. digitalWrite заточена на обращение к пинам в произвольном порядке, а регистровый доступ - на групповом. однако, ардуина допускает и групповой, т.е. через порт, доступ к битам, поэтому сравнивать надо только для "произвольного доступа", например, на такой задаче: реализовать "одиночный бегущий огонь" по всем пинам платы ардуино по кругу со скоростью 1 пин в 100 мс.
я не знаток ардуины, но, вероятно, решение для этой задачи будет таким (это тело главной функции ардуины, какой-то там 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) ;
}
я не знаю, какой константой общее количество пинов ардуины задано, поэтому придумал свою константу TOTAL_PIN.

вот и интересно сравнить размер (в т.ч. исходника, т.е. трудоемкость) и быстродействие кода "от правильных программистов", решающего ту же самую задачу.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

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

Сообщение Eddy_Em »

 while((Millis() - t) < 100) ;
Ну что за жесть? Есть же таймер. Настраиваешь, чтобы каждые 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};
Кстати, на пинах можно было бы место сэкономить, сделав массив uint16_t, но, как я уже выше говорил, даже в самых хилых STM32 оперативы настолько много, что хотя бы на 50% ее заполнить — надо еще постараться!
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Аватара пользователя
azhel12
Встал на лапы
Сообщения: 145
Зарегистрирован: Пн апр 02, 2012 15:56:23

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

Сообщение azhel12 »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4351691#p4351691"]если мне нужно работать с произвольно разбросанными пинами как с членами единого регистра[/uquote]
В очередной раз сделаю отсылку к C++ и его шаблонам:

Код: Выделить всё


template<typename... Pins>
struct VirtualPort
{
  void Set()
  {
    (Pins::Set(), ...);
  }
};

using Port = VirtualPort<Pa0, Pb2, Pc13>;

Port::Set(); // Установить "1" на все
P.S. Это не продкашн-код, конечно, можно и нужно сгруппировать пины по портам и писать в регистр каждого порта единожды, можно реализовать запись значения как в порт, просто код будет объемный, а данный кусок чисто для иллюстрации.
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

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

Сообщение COKPOWEHEU »

[uquote="Dimon456",url="/forum/viewtopic.php?p=4351626#p4351626"]Только одно не понятно, разработчик STM32CubeMX что ни чего не знает про чип?[/uquote]
Так где 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, реле и тому подобное напротив нужно постоянно.
ARV писал(а):ардуина допускает и групповой, т.е. через порт, доступ к битам
А еще допускает вообще отказаться от ардуиновской IDE и оставить только платку с ATmega328, которую спокойно программировать на ассемблере. Но ардуиной это называться уже не будет.
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;
}
ВНИМАНИЕ: писал из головы, мог что-то пропустить.
Eddy_Em писал(а):Я как-то видел код одного дегенерата для работы с 1-wire. Так он нет, чтобы UART или таймер использовать (с прерываниями, т.к. DMA у мелких аврок нет), а херячил паузы "дилеями"!!!
У меня тоже есть подобный код для SPI и I2C чтобы тестировать на малознакомой железке. В конечном автомате внутри прерывания есть шанс запутаться, а в дубовом коде - нет.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

[uquote="ARV",url="/forum/viewtopic.php?p=4351681#p4351681"]реализовать "одиночный бегущий огонь" по всем пинам платы ардуино по кругу со скоростью 1 пин в 100 мс.[/uquote]

Код: Выделить всё

// 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;    
}
[uquote="ARV",url="/forum/viewtopic.php?p=4351681#p4351681"]вот и интересно сравнить размер (в т.ч. исходника, т.е. трудоемкость) и быстродействие кода "от правильных программистов", решающего ту же самую задачу.[/uquote]Листинг под спойлером. Размер кода и скорость выполнения видно
Спойлер

Код: Выделить всё

//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 что к чему

Сообщение COKPOWEHEU »

[uquote="VladislavS",url="/forum/viewtopic.php?p=4351709#p4351709"]Он ничего общего не имеет с digitalWrite. У вас порт, пин задан на этапе компиляции, а у digitalWrite произвольный в рантайме.[/uquote]По смыслу использования ровно тоже самое. Или у вас изменение номера пина в рантайме типичная задача?
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

[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 что к чему

Сообщение ARV »

VladislavS, единственное, что я не понял в вашем коде, так это где 100 мс? или у вас SysTick делается каждые 100 мс?

ваш подход с шаблонами для пинов меня поразил давно, но, поскольку С++ для меня все равно остаётся недоступным, увы, применять его не могу... но в целом, впечатлен. тут скорее был бы любопытен код от Eddy_Em, как более одиозного программиста-фанатика :)))

Добавлено after 3 minutes 26 seconds:
и еще: листинг в данном контексте сравнения не показатель, т.к. сравнивать следует на одной и той же платформе ардуины общий размер полученной прошивки. т.е. если у вас листинг ARM-а, то надо собрать ваш код целиком на платформе ARM-Arduino, и на той же платформе мой вариант, и тогда уж сравнивать. или для AVR аналогично.

Добавлено after 1 minute 49 seconds:
COKPOWEHEU писал(а):Возможно, со временем ARV перейдет на полноценный КА, который будет не тупо висеть в пустом цикле, а возвращать управление основному коду
вообще-то, это даже обидно... мы ведь с вами не первый раз дискутируем, и по идее вы должны мало-мало иметь представление о моих реальных способностях... :cry:
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

[uquote="ARV",url="/forum/viewtopic.php?p=4351739#p4351739"]или у вас SysTick делается каждые 100 мс?[/uquote]Совершенно верно. Сделано это аппаратным или программным таймером - дело десятое. Главное, что кроме "бегущего огня" контроллер 99% времени свободен для других задач.

[uquote="ARV",url="/forum/viewtopic.php?p=4351739#p4351739"]т.к. сравнивать следует на одной и той же платформе ардуины общий размер полученной прошивки.[/uquote]Мне не очень интересна эта "пиписькометрия", так как я знаю во что выльется мой код на разных контроллерах (на AVR тоже) при разных входных параметрах.
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

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

Сообщение COKPOWEHEU »

[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 что к чему

Сообщение ARV »

я вам как бы намекнул, что КА мне осиливать не нужно, т.к. я его давно прожевал, переварил и высрал. всё ж не первый год программирую, и не один проект даже на этом сайте мной опубликован...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
azhel12
Встал на лапы
Сообщения: 145
Зарегистрирован: Пн апр 02, 2012 15:56:23

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

Сообщение azhel12 »

[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4351756#p4351756"]Кстати, и ваши шаблоны не будут столь эффективны, если решать именно ту задачу, что вам дали - последовательный перебор ножек.[/uquote]
Позволю себе встрять в дискуссию, шаблонам абсолютно все равно, в каком порядке ножки, потому что при компиляции запись в такой виртуальный порт разворачивается в запись значения в регистр конкретного порта (пусть в BSRR), так что эффективнее, наверно, уже некуда.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

[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]Есть, конечно. Конкретную задачу завсегда можно решить эффективней специальным кодом, нежели универсальным.
Ответить

Вернуться в «ARM»