Оптимизация Кода

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6315
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Оптимизация Кода

Сообщение Jack_A »

smacorp писал(а): Как и Энштейн с его теорией вероятностей. :)
Ну да, а Блез Паскаль занимался теорией относительности. Думаю, оба они удивились бы, что их пере-специализировали. Особенно Энштейн :)
Изображение
Реклама
Аватара пользователя
smacorp
Друг Кота
Сообщения: 3485
Зарегистрирован: Вт окт 22, 2013 04:37:23
Откуда: Казань

Re: Оптимизация Кода

Сообщение smacorp »

Jack_A писал(а):Особенно Энштейн
Это да, это я в спешке сильно оговорился. :oops: Но сути заблуждений товарища ozonn это не меняет. :)
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
Реклама
sTRog
Встал на лапы
Сообщения: 131
Зарегистрирован: Вс май 08, 2016 22:45:48

Re: Оптимизация Кода

Сообщение sTRog »

Действительно - убираешь функции random -памяти сразу хватает. Вывод, нужно найти генератор ПСЧ на асе. Ни у кого случаем такого не завалялось? :oops: :roll:
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18647
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Оптимизация Кода

Сообщение ARV »

sTRog писал(а):Действительно - убираешь функции random -памяти сразу хватает. Вывод, нужно найти генератор ПСЧ на асе. Ни у кого случаем такого не завалялось? :oops: :roll:
вывод только один: думать 7 раз, а потом делать 1 раз. вот смотрите, что из вашего кода сделал я:
Спойлер

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

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdlib.h>

#define T_POLL 136
#define TRANS	_BV(2)
#define LED_G	_BV(3)
#define LED_R	_BV(4)
#define BTN		_BV(1)

char mod = 0;
volatile uint8_t i;
volatile uint16_t Sec;
int rantime;

ISR(TIM0_OVF_vect){
   TCNT0 = T_POLL;
   i++;

   if (i>=10) //period 1s
   {
      Sec++;
     i=0;
   }
}

static void pulce(void){
	   PORTB |= TRANS;
	   _delay_ms(1);
	   PORTB &= ~TRANS;
}

static void pulce_led(void){
	 PORTB |= LED_G;
	 _delay_ms(10);
	 PORTB &= ~LED_G;
}

static void sequence(void){
   pulce();
   _delay_ms(10);
   pulce();
   _delay_ms(500);
   pulce();
   _delay_ms(10);
   pulce();
   Sec = 0;
}

int main(void){

   PRR = (1<<PRADC); // shut down ADC

   TIMSK0 = (1<<TOIE0);  // timer0 overflow interrupt enable
   TCCR0B = (1<<CS02) | (1<<CS00); // prescaler 1/1024

   sei();


   DDRB = TRANS | LED_G | LED_R; //транзистор

   rantime = 3600 + random() % 3600;

	while (1){
	   if (mod==0){
		   if (Sec>=5400){
			   sequence();
		   }
	   }

	   if (mod==1){
		   if (Sec>=rantime){
			   sequence();
			   rantime = 3600 + random()%3600;
		   }
	   }

	   if (PINB & BTN){
		   cli();
		   Sec = 0;
		   if (mod==0){
			   mod = 1;
			   pulce_led();
		  } else {
			  mod = 0;
			  pulce_led();
			  _delay_ms(100);
			  pulce_led();
		  }
		   _delay_ms(1000);
		   sei();
	   }
	}
}
по-моему, функционал сохранен на 100%, но объем памяти код при этом всего 930 байт занимает против вашего варианта в 1060 байт или сколько там было... при этом не потребовалось заменять random()

всех делов-то - подумать над ОПТИМИЗАЦИЕЙ кода. кстати, все, что я сделал, вам советовали ранее, просто я не поленился этим советам последовать...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Эиком - электронные компоненты и радиодетали
sTRog
Встал на лапы
Сообщения: 131
Зарегистрирован: Вс май 08, 2016 22:45:48

Re: Оптимизация Кода

Сообщение sTRog »

Спасибо дядя AVR. Буду разбираться, что и как можно было сделать лучше.
Реклама
ozonn
Вымогатель припоя
Сообщения: 522
Зарегистрирован: Чт янв 21, 2016 15:59:10

Re: Оптимизация Кода

Сообщение ozonn »

ARV писал(а):
ozonn писал(а):именно в непредсказуемые моменты
для работающей программы в МК непредсказуемые моменты могут возникать ТОЛЬКО по внешним событиям - я писал про прерывания. любые ВНУТРЕННИЕ события будут однозначно предсказуемыми.

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

Добавлено after 4 minutes 28 seconds:
smacorp писал(а):
Jack_A писал(а):Особенно Энштейн
Это да, это я в спешке сильно оговорился. :oops: Но сути заблуждений товарища ozonn это не меняет. :)
товарищь smacorp, я не могу понять, в чем вы меня пытаетесь убедить? В том, что выборка чисел из монотонного ряда чисел, основанная на случайном событии будет не случайной? :))

ну так докажите обратное, размажте меня по стене :))
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18647
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Оптимизация Кода

Сообщение ARV »

ozonn писал(а):разумеется событие внешнее. это само собой разумеется
это не разумеется само собой, т.к. речь в теме идет о программной генерации случайных чисел, а у вас фактически используется внешний генератор случайных чисел, а не внутренний.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
ozonn
Вымогатель припоя
Сообщения: 522
Зарегистрирован: Чт янв 21, 2016 15:59:10

Re: Оптимизация Кода

Сообщение ozonn »

ARV писал(а):
ozonn писал(а):разумеется событие внешнее. это само собой разумеется
это не разумеется само собой, т.к. речь в теме идет о программной генерации случайных чисел, а у вас фактически используется внешний генератор случайных чисел, а не внутренний.
внутренних генераторов случайных чисел в природе не существует. Вы в этой теме ведете речь о том чего нет. За сим откланиваюсь :)
sTRog
Встал на лапы
Сообщения: 131
Зарегистрирован: Вс май 08, 2016 22:45:48

Re: Оптимизация Кода

Сообщение sTRog »

Возник вроде только один вопрос, AVR

Как одной и той же командой ножки присваиваются значения - работать на выход и на вход?
#define LED_R _BV(4)
#define BTN _BV(1)
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: Оптимизация Кода

Сообщение COKPOWEHEU »

Никак. Это только макроомрпделение номера ножки, само по себе оно ничего не далает.
Запишете DDRB |= LED_R; будет выход, запишете DDRB &=~ BTN; будет вход
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18647
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Оптимизация Кода

Сообщение ARV »

ozonn писал(а):внутренних генераторов случайных чисел в природе не существует.
существуют. но раз вы уже откланялись - с тем и оставайтесь :)
да и речь шла о другом, а именно о генераторе псевдослучайной последовательности... но где вам снисходить до реалий...
COKPOWEHEU писал(а):запишете DDRB &=~ BTN; будет вход
только в случае, если вывод всегда сохраняет свою функцию входа, делать вот этого DDRB &=~ BTN; вообще не надо (как я и поступил в своем варианте кода) - DDRВ и так обнулен полностью после сброса.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6315
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Оптимизация Кода

Сообщение Jack_A »

На состояние после сброса по умолчанию я бы не стал полагаться, имею печальный опыт. Но если состояние пинов в процессе работы не собирается меняться, то DDRB можно прописать прямым присваиванием, как в моем варианте кода.
Изображение
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18647
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Оптимизация Кода

Сообщение ARV »

Jack_A писал(а):На состояние после сброса по умолчанию я бы не стал полагаться, имею печальный опыт.
да вы что? а как же вы, например, на аппаратный таймер полагаетесь, а на аппаратный сброс - нет? если не верить в аппаратную часть, надо идти в дворники...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: Оптимизация Кода

Сообщение COKPOWEHEU »

ARV писал(а):только в случае, если вывод всегда сохраняет свою функцию входа, делать вот этого DDRB &=~ BTN; вообще не надо (как я и поступил в своем варианте кода) - DDRВ и так обнулен полностью после сброса.
Я это приводил в качестве иллюстрации перевода вывода из произвольного состояния в состояние входа. Для абстрактного куска кода. Например, если этот вывод используется иногда для входа, иногда для выхода.
Jack_A писал(а):если состояние пинов в процессе работы не собирается меняться, то DDRB можно прописать прямым присваиванием, как в моем варианте кода.
Вот это ИМХО самое простое и правильное решение. Одной командой за 2-3 такта настроить все выводы порта вместо побитной настройки. В редких случаях, правда, это может ухудшить читаемость кода
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Оптимизация Кода

Сообщение Z_h_e »

Jack_A писал(а):На состояние после сброса по умолчанию я бы не стал полагаться, имею печальный опыт.
Я тоже не понимаю. Вы предлагаете все регистры инициализировать или какие-то выборочно? И почему следует, например, верить что некая команда выполнит заявленное в ДШ , но не следует верить, что регистр будет инициализирован указанным значением? Что за печальный опыт?
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6315
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Оптимизация Кода

Сообщение Jack_A »

ARV писал(а): если не верить в аппаратную часть, надо идти в дворники...
Верить - это к церковникам. А единожды упершись в МК, который работал через опу, в то время как полсотни остальных с той же прогой работали как надо, анализом установил, что один бит в регистре ( подробности не помню за давностью) становится не в ту позицию по умолчанию. Разбирать что с ним случилось - на эксперименты времени не было - заказчики, график поставки . Прописал ему что надо в регистр - песня! С тех пор взял себе за правило - всю инициализацию прописывать. Речь шла о потоке в солидной фирме, и мое "верю - не верю" шеф просто не понял бы. Конечно, если речь идет о кухонном таймере любимой теще - можно и "по вере" написать, но на произваодстве главное - надежность, а не твое "верю - не верю".
В дворники не собираюсь, в своем ремесле достиг достаточно приличных результатов. Сейчас, увы, на пенсии :(
А насчет почему - можно, перелистывая бесчисленные Errata Sheet, доискиваться, что "в партиях с XXXX по YYYY имеется вот такая за$бень, потому будьте бдительны", я предпочел решение в лоб.
СпойлерНесмотря на разногласия в вопросах веры :) , Вас из friend-list'а не убираю :))
Изображение
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Оптимизация Кода

Сообщение Z_h_e »

Правильно ли я понял, что Вы из-за неисправного МК инициализируете ВСЕ регистры?
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: Оптимизация Кода

Сообщение Reflector »

Z_h_e писал(а):Я тоже не понимаю. Вы предлагаете все регистры инициализировать или какие-то выборочно? И почему следует, например, верить что некая команда выполнит заявленное в ДШ , но не следует верить, что регистр будет инициализирован указанным значением? Что за печальный опыт?
Произошел сбой, некая команда не выполнила заявленной в ДШ, прыгнула на свободное место, мк дошагал до конца и запустился с нулевого адреса, но со значениями регистров которые были на момент сбоя...

ps. Давно авр-ми не занимался, сейчас ради интереса скомпилировал вариант от ARV(gcc -Os), получил 804 байта.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Оптимизация Кода

Сообщение Z_h_e »

Reflector писал(а):Произошел сбой, некая команда не выполнила заявленной в ДШ, прыгнула на свободное место, мк дошагал до конца и запустился с нулевого адреса, но со значениями регистров которые были на момент сбоя...
Если опасаться такого сбоя, который мог бы просто завесить МК, то проще определить причину выполнения начального кода и сделать соответствующие шаги. АВР это умеет.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6315
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Оптимизация Кода

Сообщение Jack_A »

Z_h_e писал(а):Правильно ли я понял, что Вы из-за неисправного МК инициализируете ВСЕ регистры?
Нет, неправильно поняли. В исправном МК ( но с каким-то bug, позднее описанном в errata list и исправленном ) и во всех остальных я инициализирую все используемые регистры . Поверьте, памяти на пол десятка дополнительных команд хватало, а если не хватало - криво написан неоптимальный код или МК неправильно выбран, вот тогда действительно - в дворники.
Впрочем, свое видение я не навязываю. Вольному - воля, пьяному - рай . ©
Последний раз редактировалось Jack_A Сб ноя 05, 2016 11:18:48, всего редактировалось 1 раз.
Изображение
Ответить

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