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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

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

Сообщение Z_h_e »

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

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

Сообщение Reflector »

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

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

Сообщение Jack_A »

В МК масса неиспользуемых регистров, если только его не юзают по максимуму. Что мне инициализировать порт D, к примеру, если он ни к чему не подключен? А насчет прерываний - все неиспользуемые векторы заткнуты reti. Ну а кто пишет

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

  .org  XXXX
<вектор>
  .org  YYYY
<вектор>
- в случае чего пусть на себя обижается и героически борется.
Это мое мнение, и я с ним полностью согласен :)
Изображение
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

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

Сообщение Z_h_e »

Reflector писал(а):Мк не завис, он просто прыгнул не туда, источник сброса от этого не меняется.
Я имел ввиду, что МК может не только начать код выполнять сначала, но может где-нибудь с таким же успехом зависнуть и выполнять что попало (я имею ввиду при сбое). Но это не объясняет зачем делать программную переинициализацию регистров, и почему ее надо делать выборочно.

Повторюсь, выполнение кода с "нуля" нештатно, в АВР легко идентифицировать. Однако сбой, на то и сбой, он может просто изменить значение одного регистра (при скачке питания допустим). Будет Ваш МК работать в два раза быстрее или медленнее или еще что-то и как спасет в таком случае переинициализация выборочных регистров?
Мк не завис, он просто прыгнул не туда, источник сброса от этого не меняется.
Источника сброса вообще не будет.

Добавлено after 8 minutes 57 seconds:
Jack_A писал(а):В МК масса неиспользуемых регистров,
Неиспользуемых программистом, но не самим МК.
Jack_A писал(а):Что мне инициализировать порт D, к примеру, если он ни к чему не подключен?
Ну не только у портов есть регистры, которые Вы не используете. А вдруг OSCCAL неправильно инициализируется? А вдруг внешние прерывания разрешены на том же порте по уровню, будете сидеть в прерывании через команду? Вы очень не предусмотрительны.

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

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

Сообщение Reflector »

Z_h_e писал(а):Я имел ввиду, что МК может не только начать код выполнять сначала, но может где-нибудь с таким же успехом зависнуть и выполнять что попало (я имею ввиду при сбое). Но это не объясняет зачем делать программную переинициализацию регистров, и почему ее надо делать выборочно.

Повторюсь, выполнение кода с "нуля" нештатно, в АВР легко идентифицировать. Однако сбой, на то и сбой, он может просто изменить значение одного регистра (при скачке питания допустим). Будет Ваш МК работать в два раза быстрее или медленнее или еще что-то и как спасет в таком случае переинициализация выборочных регистров?
Это вопрос вероятностей. При сбое мк может наменять что угодно и вернуться к "нормальной" работе с ненормальными значениями регистров. Но он может и зациклиться, тогда поможет watchdog. Или выполнение кода провалится в неиспользуемую область флеша, что весьма вероятно, особенно если во флеше много незанятого места, тогда более полная инициализация будет весьма кстати.
Реклама
sTRog
Встал на лапы
Сообщения: 131
Зарегистрирован: Вс май 08, 2016 22:45:48

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

Сообщение sTRog »

Друзья. Есть ли у кого возможность подсказать, как можно оптимизировать моего динозавра?
Спойлер

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

#define F_CPU 1200000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdlib.h>

#define T_POLL 136
#define TRANSON   _BV(2)
#define TRANSOFF   _BV(4)
#define LED_R   _BV(3)
#define BTN      _BV(1)

char mod = 0;
volatile uint8_t amount; //êîëè÷åñòâî ïîâòîðåíèé äëÿ âêëþ÷åíèÿ íóæíîãî ðåæèìà.
volatile uint8_t i;
volatile uint16_t Sec;
volatile uint16_t SecF=0;// ïåðåìåííàÿ äëÿ êîíòðîëÿ ïðîøåäøåãî âðåìåíè ñíà÷àëî âêëþ÷àåò îäíó ïðîâåðêó, çàòåì äðóãóþ
int rantime;

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

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


static void pulcesDREAMon(void){
	for ( amount = 0; amount < 12; amount++ ) //ïîâòîðÿåì 11 ðàç âêëþ÷åíèå âûêëþ÷åíèå òðàíçèñòîðà äëÿ âêëþ÷åíèÿ ðåæèìà.
	 {
      PORTB |= TRANSON;
      _delay_ms(500);
      PORTB &= ~TRANSON;
	  _delay_ms(1000);
	}
}

static void pulcesDREAMoff(void){
	for ( amount = 0; amount < 12; amount++ ) //ïîâòîðÿåì 11 ðàç âêëþ÷åíèå âûêëþ÷åíèå òðàíçèñòîðà äëÿ âêëþ÷åíèÿ ðåæèìà.
	 {
      PORTB |= TRANSOFF;
      _delay_ms(500);
      PORTB &= ~TRANSOFF;
	  _delay_ms(1000);
	}
}

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

static void povtor_per(void){
   	SecF=5;
	Sec = 0;
}

static void povtor_per2(void){
   	SecF=3000;
	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 = TRANSON | TRANSOFF | LED_R; //òðàíçèñòîðîí òðíàçèñòîðîô è ñâåòîäèîä ðàáîòàþò íà âûõîä.

   rantime = 1800 + random() % 5400;

   while (1){
      if (mod==0){
         if (Sec>=1800){
            pulcesDREAMon(); //âêëþ÷àåì ðåæèì íî÷üþ è äàåì 5 ñåê ïîðàáîòàòü.
			povtor_per();
         }

		 if (Sec>=SecF){
            pulcesDREAMoff(); //âûêëþ÷àåì ðåæèì íî÷üþ.
			povtor_per2();
         }
			
      }

      if (mod==1){
         if (Sec>=rantime){
            pulcesDREAMon(); //âêëþ÷àåì ðåæèì äíåì è äàåì 5 ñåê ïîðàáîòàòü.
			povtor_per();
			rantime = 1800 + random() % 5400;
         }

		 if (Sec>=SecF){
            pulcesDREAMoff(); //âûêëþ÷àåì ðåæèì íî÷üþ.
			povtor_per2();
         }
            
         }
		
      

      if (PINB & BTN){
         cli();
         Sec = 0;
         if (mod==0){
            mod = 1;
            pulce_led();
        } else {
           mod = 0;
           pulce_led();
           _delay_ms(100);
           pulce_led();
		   SecF=5400;
        }
         _delay_ms(1000);
         sei();
      }
   }
}

Весит аж 4кб. Вроде и следовал советам, что уже давали, а вылезла такая махина.
:oops: :oops: :oops:
Реклама
Аватара пользователя
Ilyazh
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Ср май 21, 2014 13:18:07
Откуда: Санкт-Петербург
Контактная информация:

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

Сообщение Ilyazh »

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

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

Сообщение ARV »

Ощущение, что у вас не включена оптимизация. Опция -Os имеется при запуске компилятора?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Starichok51
Модератор
Сообщения: 19053
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

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

Сообщение Starichok51 »

sTRog писал(а):Есть ли у кого возможность подсказать, как можно оптимизировать моего динозавра?
Весит аж 4кб. Вроде и следовал советам, что уже давали, а вылезла такая махина.
написать на ассемблере. получится в 5-7 раз короче.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Аватара пользователя
scorpi_0n
Вымогатель припоя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

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

Сообщение scorpi_0n »

Не получится, ну ни как. Он с ключами компилятора разобраться не может и поиском пользоваться не умеет, а вы ему АСМ предлагаете. Да он на третьей строчке АСМа утонет окончательно.
spongebob
Грызет канифоль
Сообщения: 289
Зарегистрирован: Пт мар 20, 2009 12:25:47
Откуда: Ivanovo
Контактная информация:

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

Сообщение spongebob »

А как это вообще может занимать 4кб?
Ответить

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