Например TDA7294

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





Текущее время: Ср июл 16, 2025 03:21:02

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


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



Начать новую тему Ответить на тему  [ Сообщений: 51 ]    , 2,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Оптимизация Кода
СообщениеДобавлено: Чт ноя 03, 2016 19:47:15 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 878
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 6024
Откуда: Minsk
Рейтинг сообщения: 0
smacorp писал(а):
Как и Энштейн с его теорией вероятностей. :)

Ну да, а Блез Паскаль занимался теорией относительности. Думаю, оба они удивились бы, что их пере-специализировали. Особенно Энштейн :)

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


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

Карма: 61
Рейтинг сообщений: 1537
Зарегистрирован: Вт окт 22, 2013 04:37:23
Сообщений: 3326
Откуда: Казань
Рейтинг сообщения: 0
Jack_A писал(а):
Особенно Энштейн
Это да, это я в спешке сильно оговорился. :oops: Но сути заблуждений товарища ozonn это не меняет. :)

_________________
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезисты Ordyl Alpha 350 и AM 140.
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльная маска XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Оптимизация Кода
СообщениеДобавлено: Чт ноя 03, 2016 20:21:23 
Встал на лапы

Зарегистрирован: Вс май 08, 2016 22:45:48
Сообщений: 131
Рейтинг сообщения: 0
Действительно - убираешь функции random -памяти сразу хватает. Вывод, нужно найти генератор ПСЧ на асе. Ни у кого случаем такого не завалялось? :oops: :roll:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Оптимизация Кода
СообщениеДобавлено: Чт ноя 03, 2016 20:45:48 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18403
Откуда: Новочеркасск
Рейтинг сообщения: 1
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
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()

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

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

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


Вернуться наверх
 
Выбираем индустриальные и медицинские источники питания MEAN WELL в открытом исполнении

Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Оптимизация Кода
СообщениеДобавлено: Чт ноя 03, 2016 21:13:25 
Встал на лапы

Зарегистрирован: Вс май 08, 2016 22:45:48
Сообщений: 131
Рейтинг сообщения: 0
Спасибо дядя AVR. Буду разбираться, что и как можно было сделать лучше.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Оптимизация Кода
СообщениеДобавлено: Пт ноя 04, 2016 09:25:43 
Вымогатель припоя

Карма: 6
Рейтинг сообщений: 7
Зарегистрирован: Чт янв 21, 2016 15:59:10
Сообщений: 522
Рейтинг сообщения: -3
ARV писал(а):
ozonn писал(а):
именно в непредсказуемые моменты
для работающей программы в МК непредсказуемые моменты могут возникать ТОЛЬКО по внешним событиям - я писал про прерывания. любые ВНУТРЕННИЕ события будут однозначно предсказуемыми.

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

разумеется событие внешнее. это само собой разумеется

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

товарищь smacorp, я не могу понять, в чем вы меня пытаетесь убедить? В том, что выборка чисел из монотонного ряда чисел, основанная на случайном событии будет не случайной? :))

ну так докажите обратное, размажте меня по стене :))


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

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Оптимизация Кода
СообщениеДобавлено: Пт ноя 04, 2016 09:56:14 
Ум, честь и совесть. И скромность.
Аватар пользователя

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

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

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Оптимизация Кода
СообщениеДобавлено: Пт ноя 04, 2016 10:03:32 
Вымогатель припоя

Карма: 6
Рейтинг сообщений: 7
Зарегистрирован: Чт янв 21, 2016 15:59:10
Сообщений: 522
Рейтинг сообщения: 0
ARV писал(а):
ozonn писал(а):
разумеется событие внешнее. это само собой разумеется
это не разумеется само собой, т.к. речь в теме идет о программной генерации случайных чисел, а у вас фактически используется внешний генератор случайных чисел, а не внутренний.

внутренних генераторов случайных чисел в природе не существует. Вы в этой теме ведете речь о том чего нет. За сим откланиваюсь :)


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

Зарегистрирован: Вс май 08, 2016 22:45:48
Сообщений: 131
Рейтинг сообщения: 0
Возник вроде только один вопрос, AVR

Как одной и той же командой ножки присваиваются значения - работать на выход и на вход?
#define LED_R _BV(4)
#define BTN _BV(1)


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

Карма: 8
Рейтинг сообщений: 209
Зарегистрирован: Чт июн 10, 2010 20:11:19
Сообщений: 1520
Рейтинг сообщения: 0
Никак. Это только макроомрпделение номера ножки, само по себе оно ничего не далает.
Запишете DDRB |= LED_R; будет выход, запишете DDRB &=~ BTN; будет вход


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Оптимизация Кода
СообщениеДобавлено: Пт ноя 04, 2016 18:49:49 
Ум, честь и совесть. И скромность.
Аватар пользователя

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

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

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

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Оптимизация Кода
СообщениеДобавлено: Пт ноя 04, 2016 19:46:09 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 878
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 6024
Откуда: Minsk
Рейтинг сообщения: 0
На состояние после сброса по умолчанию я бы не стал полагаться, имею печальный опыт. Но если состояние пинов в процессе работы не собирается меняться, то DDRB можно прописать прямым присваиванием, как в моем варианте кода.

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Оптимизация Кода
СообщениеДобавлено: Пт ноя 04, 2016 20:58:26 
Ум, честь и совесть. И скромность.
Аватар пользователя

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

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

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Оптимизация Кода
СообщениеДобавлено: Пт ноя 04, 2016 23:20:06 
Говорящий с текстолитом
Аватар пользователя

Карма: 8
Рейтинг сообщений: 209
Зарегистрирован: Чт июн 10, 2010 20:11:19
Сообщений: 1520
Рейтинг сообщения: 0
ARV писал(а):
только в случае, если вывод всегда сохраняет свою функцию входа, делать вот этого DDRB &=~ BTN; вообще не надо (как я и поступил в своем варианте кода) - DDRВ и так обнулен полностью после сброса.
Я это приводил в качестве иллюстрации перевода вывода из произвольного состояния в состояние входа. Для абстрактного куска кода. Например, если этот вывод используется иногда для входа, иногда для выхода.
Jack_A писал(а):
если состояние пинов в процессе работы не собирается меняться, то DDRB можно прописать прямым присваиванием, как в моем варианте кода.
Вот это ИМХО самое простое и правильное решение. Одной командой за 2-3 такта настроить все выводы порта вместо побитной настройки. В редких случаях, правда, это может ухудшить читаемость кода


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

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

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


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

Карма: 62
Рейтинг сообщений: 878
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 6024
Откуда: Minsk
Рейтинг сообщения: 3
ARV писал(а):
если не верить в аппаратную часть, надо идти в дворники...

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

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


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

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

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


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

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

Произошел сбой, некая команда не выполнила заявленной в ДШ, прыгнула на свободное место, мк дошагал до конца и запустился с нулевого адреса, но со значениями регистров которые были на момент сбоя...

ps. Давно авр-ми не занимался, сейчас ради интереса скомпилировал вариант от ARV(gcc -Os), получил 804 байта.


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

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

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


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

Карма: 62
Рейтинг сообщений: 878
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 6024
Откуда: Minsk
Рейтинг сообщения: 0
Z_h_e писал(а):
Правильно ли я понял, что Вы из-за неисправного МК инициализируете ВСЕ регистры?

Нет, неправильно поняли. В исправном МК ( но с каким-то bug, позднее описанном в errata list и исправленном ) и во всех остальных я инициализирую все используемые регистры . Поверьте, памяти на пол десятка дополнительных команд хватало, а если не хватало - криво написан неоптимальный код или МК неправильно выбран, вот тогда действительно - в дворники.
Впрочем, свое видение я не навязываю. Вольному - воля, пьяному - рай . ©

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


Последний раз редактировалось Jack_A Сб ноя 05, 2016 11:18:48, всего редактировалось 1 раз.

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

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


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

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


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

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


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