Например TDA7294

Форум РадиоКот • Просмотр темы - Оптимизация Кода
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вс июл 27, 2025 22:12:44

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 51 ]    , , 3
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Оптимизация Кода
СообщениеДобавлено: Сб ноя 05, 2016 11:17:17 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2708
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Jack_A писал(а):
я инициализирую все используемые регистры .
Но в МК нет неиспользуемых регистров. По той же Вашей логике, где гарантия, что не включится некая маска прерывания сама, который Вы не используете, из-за бага?

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Оптимизация Кода
СообщениеДобавлено: Сб ноя 05, 2016 11:17:54 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2089
Рейтинг сообщения: 0
Z_h_e писал(а):
Если опасаться такого сбоя, который мог бы просто завесить МК, то проще определить причину выполнения начального кода и сделать соответствующие шаги. АВР это умеет.

Мк не завис, он просто прыгнул не туда, источник сброса от этого не меняется.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Оптимизация Кода
СообщениеДобавлено: Сб ноя 05, 2016 11:27:34 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 878
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 6039
Откуда: Minsk
Рейтинг сообщения: 3
В МК масса неиспользуемых регистров, если только его не юзают по максимуму. Что мне инициализировать порт D, к примеру, если он ни к чему не подключен? А насчет прерываний - все неиспользуемые векторы заткнуты reti. Ну а кто пишет
Код:
  .org  XXXX
<вектор>
  .org  YYYY
<вектор>

- в случае чего пусть на себя обижается и героически борется.
Это мое мнение, и я с ним полностью согласен :)

_________________
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Оптимизация Кода
СообщениеДобавлено: Сб ноя 05, 2016 11:37:40 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2708
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Reflector писал(а):
Мк не завис, он просто прыгнул не туда, источник сброса от этого не меняется.
Я имел ввиду, что МК может не только начать код выполнять сначала, но может где-нибудь с таким же успехом зависнуть и выполнять что попало (я имею ввиду при сбое). Но это не объясняет зачем делать программную переинициализацию регистров, и почему ее надо делать выборочно.

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

Цитата:
Мк не завис, он просто прыгнул не туда, источник сброса от этого не меняется.
Источника сброса вообще не будет.

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

То что Вы инициализируете дополнительно это конечно Ваше дело, но не надо убеждать именно так надо делать.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Оптимизация Кода
СообщениеДобавлено: Сб ноя 05, 2016 12:38:40 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2089
Рейтинг сообщения: 0
Z_h_e писал(а):
Я имел ввиду, что МК может не только начать код выполнять сначала, но может где-нибудь с таким же успехом зависнуть и выполнять что попало (я имею ввиду при сбое). Но это не объясняет зачем делать программную переинициализацию регистров, и почему ее надо делать выборочно.

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

Это вопрос вероятностей. При сбое мк может наменять что угодно и вернуться к "нормальной" работе с ненормальными значениями регистров. Но он может и зациклиться, тогда поможет watchdog. Или выполнение кода провалится в неиспользуемую область флеша, что весьма вероятно, особенно если во флеше много незанятого места, тогда более полная инициализация будет весьма кстати.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Оптимизация Кода
СообщениеДобавлено: Вс фев 05, 2017 20:22:17 
Встал на лапы

Зарегистрирован: Вс май 08, 2016 22:45:48
Сообщений: 131
Рейтинг сообщения: 0
Друзья. Есть ли у кого возможность подсказать, как можно оптимизировать моего динозавра?
Спойлер
Код:
#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:


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Оптимизация Кода
СообщениеДобавлено: Чт фев 09, 2017 10:47:34 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Ср май 21, 2014 13:18:07
Сообщений: 24
Откуда: Санкт-Петербург
Рейтинг сообщения: 0
В качестве генератора "случайных" чисел можно использовать АЦП на ножке висящей в воздухе. Наводки и шумы будут каждый раз давать какое-то непонятное значение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Оптимизация Кода
СообщениеДобавлено: Чт фев 09, 2017 11:47:08 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18403
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Ощущение, что у вас не включена оптимизация. Опция -Os имеется при запуске компилятора?

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Оптимизация Кода
СообщениеДобавлено: Чт фев 09, 2017 12:18:19 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2917
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18741
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
sTRog писал(а):
Есть ли у кого возможность подсказать, как можно оптимизировать моего динозавра?
Весит аж 4кб. Вроде и следовал советам, что уже давали, а вылезла такая махина.
написать на ассемблере. получится в 5-7 раз короче.

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Оптимизация Кода
СообщениеДобавлено: Чт фев 09, 2017 12:41:27 
Вымогатель припоя
Аватар пользователя

Карма: -2
Рейтинг сообщений: -32
Зарегистрирован: Вс ноя 01, 2015 13:13:49
Сообщений: 616
Рейтинг сообщения: 0
Не получится, ну ни как. Он с ключами компилятора разобраться не может и поиском пользоваться не умеет, а вы ему АСМ предлагаете. Да он на третьей строчке АСМа утонет окончательно.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Оптимизация Кода
СообщениеДобавлено: Вс фев 12, 2017 22:17:36 
Грызет канифоль

Карма: 3
Рейтинг сообщений: 10
Зарегистрирован: Пт мар 20, 2009 12:25:47
Сообщений: 289
Откуда: Ivanovo
Рейтинг сообщения: 0
А как это вообще может занимать 4кб?


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 51 ]    , , 3

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y