Ну да, а Блез Паскаль занимался теорией относительности. Думаю, оба они удивились бы, что их пере-специализировали. Особенно Энштейнsmacorp писал(а): Как и Энштейн с его теорией вероятностей.
Оптимизация Кода
Re: Оптимизация Кода
- Реклама
Re: Оптимизация Кода
Это да, это я в спешке сильно оговорился.Jack_A писал(а):Особенно Энштейн
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
Re: Оптимизация Кода
Действительно - убираешь функции random -памяти сразу хватает. Вывод, нужно найти генератор ПСЧ на асе. Ни у кого случаем такого не завалялось?

- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18647
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Оптимизация Кода
вывод только один: думать 7 раз, а потом делать 1 раз. вот смотрите, что из вашего кода сделал я:sTRog писал(а):Действительно - убираешь функции random -памяти сразу хватает. Вывод, нужно найти генератор ПСЧ на асе. Ни у кого случаем такого не завалялось?![]()
Спойлер
Код: Выделить всё
#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();
}
}
}всех делов-то - подумать над ОПТИМИЗАЦИЕЙ кода. кстати, все, что я сделал, вам советовали ранее, просто я не поленился этим советам последовать...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Оптимизация Кода
Спасибо дядя AVR. Буду разбираться, что и как можно было сделать лучше.
- Реклама
Re: Оптимизация Кода
разумеется событие внешнее. это само собой разумеетсяARV писал(а):для работающей программы в МК непредсказуемые моменты могут возникать ТОЛЬКО по внешним событиям - я писал про прерывания. любые ВНУТРЕННИЕ события будут однозначно предсказуемыми.ozonn писал(а):именно в непредсказуемые моменты
то есть ваш подход сработает для "электронного кубика" или "однорукого бандита". но устройство, генерирующее текст, выбирая слова из массива по "случайному" индексу, будет генерировать всегда одинаковую последовательность фраз, т.е. однозначно предсказуемо.
Добавлено after 4 minutes 28 seconds:
товарищь smacorp, я не могу понять, в чем вы меня пытаетесь убедить? В том, что выборка чисел из монотонного ряда чисел, основанная на случайном событии будет не случайной?smacorp писал(а):Это да, это я в спешке сильно оговорился.Jack_A писал(а):Особенно ЭнштейнНо сути заблуждений товарища ozonn это не меняет.
ну так докажите обратное, размажте меня по стене
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18647
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Оптимизация Кода
это не разумеется само собой, т.к. речь в теме идет о программной генерации случайных чисел, а у вас фактически используется внешний генератор случайных чисел, а не внутренний.ozonn писал(а):разумеется событие внешнее. это само собой разумеется
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Оптимизация Кода
внутренних генераторов случайных чисел в природе не существует. Вы в этой теме ведете речь о том чего нет. За сим откланиваюсьARV писал(а):это не разумеется само собой, т.к. речь в теме идет о программной генерации случайных чисел, а у вас фактически используется внешний генератор случайных чисел, а не внутренний.ozonn писал(а):разумеется событие внешнее. это само собой разумеется
Re: Оптимизация Кода
Возник вроде только один вопрос, AVR
Как одной и той же командой ножки присваиваются значения - работать на выход и на вход?
#define LED_R _BV(4)
#define BTN _BV(1)
Как одной и той же командой ножки присваиваются значения - работать на выход и на вход?
#define LED_R _BV(4)
#define BTN _BV(1)
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: Оптимизация Кода
Никак. Это только макроомрпделение номера ножки, само по себе оно ничего не далает.
Запишете DDRB |= LED_R; будет выход, запишете DDRB &=~ BTN; будет вход
Запишете DDRB |= LED_R; будет выход, запишете DDRB &=~ BTN; будет вход
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18647
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Оптимизация Кода
существуют. но раз вы уже откланялись - с тем и оставайтесьozonn писал(а):внутренних генераторов случайных чисел в природе не существует.
да и речь шла о другом, а именно о генераторе псевдослучайной последовательности... но где вам снисходить до реалий...
только в случае, если вывод всегда сохраняет свою функцию входа, делать вот этого DDRB &=~ BTN; вообще не надо (как я и поступил в своем варианте кода) - DDRВ и так обнулен полностью после сброса.COKPOWEHEU писал(а):запишете DDRB &=~ BTN; будет вход
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Оптимизация Кода
На состояние после сброса по умолчанию я бы не стал полагаться, имею печальный опыт. Но если состояние пинов в процессе работы не собирается меняться, то DDRB можно прописать прямым присваиванием, как в моем варианте кода.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18647
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Оптимизация Кода
да вы что? а как же вы, например, на аппаратный таймер полагаетесь, а на аппаратный сброс - нет? если не верить в аппаратную часть, надо идти в дворники...Jack_A писал(а):На состояние после сброса по умолчанию я бы не стал полагаться, имею печальный опыт.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: Оптимизация Кода
Я это приводил в качестве иллюстрации перевода вывода из произвольного состояния в состояние входа. Для абстрактного куска кода. Например, если этот вывод используется иногда для входа, иногда для выхода.ARV писал(а):только в случае, если вывод всегда сохраняет свою функцию входа, делать вот этого DDRB &=~ BTN; вообще не надо (как я и поступил в своем варианте кода) - DDRВ и так обнулен полностью после сброса.
Вот это ИМХО самое простое и правильное решение. Одной командой за 2-3 такта настроить все выводы порта вместо побитной настройки. В редких случаях, правда, это может ухудшить читаемость кодаJack_A писал(а):если состояние пинов в процессе работы не собирается меняться, то DDRB можно прописать прямым присваиванием, как в моем варианте кода.
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Оптимизация Кода
Я тоже не понимаю. Вы предлагаете все регистры инициализировать или какие-то выборочно? И почему следует, например, верить что некая команда выполнит заявленное в ДШ , но не следует верить, что регистр будет инициализирован указанным значением? Что за печальный опыт?Jack_A писал(а):На состояние после сброса по умолчанию я бы не стал полагаться, имею печальный опыт.
Re: Оптимизация Кода
Верить - это к церковникам. А единожды упершись в МК, который работал через опу, в то время как полсотни остальных с той же прогой работали как надо, анализом установил, что один бит в регистре ( подробности не помню за давностью) становится не в ту позицию по умолчанию. Разбирать что с ним случилось - на эксперименты времени не было - заказчики, график поставки . Прописал ему что надо в регистр - песня! С тех пор взял себе за правило - всю инициализацию прописывать. Речь шла о потоке в солидной фирме, и мое "верю - не верю" шеф просто не понял бы. Конечно, если речь идет о кухонном таймере любимой теще - можно и "по вере" написать, но на произваодстве главное - надежность, а не твое "верю - не верю".ARV писал(а): если не верить в аппаратную часть, надо идти в дворники...
В дворники не собираюсь, в своем ремесле достиг достаточно приличных результатов. Сейчас, увы, на пенсии
А насчет почему - можно, перелистывая бесчисленные Errata Sheet, доискиваться, что "в партиях с XXXX по YYYY имеется вот такая за$бень, потому будьте бдительны", я предпочел решение в лоб.
Спойлер
Несмотря на разногласия в вопросах веры- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Оптимизация Кода
Правильно ли я понял, что Вы из-за неисправного МК инициализируете ВСЕ регистры?
Re: Оптимизация Кода
Произошел сбой, некая команда не выполнила заявленной в ДШ, прыгнула на свободное место, мк дошагал до конца и запустился с нулевого адреса, но со значениями регистров которые были на момент сбоя...Z_h_e писал(а):Я тоже не понимаю. Вы предлагаете все регистры инициализировать или какие-то выборочно? И почему следует, например, верить что некая команда выполнит заявленное в ДШ , но не следует верить, что регистр будет инициализирован указанным значением? Что за печальный опыт?
ps. Давно авр-ми не занимался, сейчас ради интереса скомпилировал вариант от ARV(gcc -Os), получил 804 байта.
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Оптимизация Кода
Если опасаться такого сбоя, который мог бы просто завесить МК, то проще определить причину выполнения начального кода и сделать соответствующие шаги. АВР это умеет.Reflector писал(а):Произошел сбой, некая команда не выполнила заявленной в ДШ, прыгнула на свободное место, мк дошагал до конца и запустился с нулевого адреса, но со значениями регистров которые были на момент сбоя...
Re: Оптимизация Кода
Нет, неправильно поняли. В исправном МК ( но с каким-то bug, позднее описанном в errata list и исправленном ) и во всех остальных я инициализирую все используемые регистры . Поверьте, памяти на пол десятка дополнительных команд хватало, а если не хватало - криво написан неоптимальный код или МК неправильно выбран, вот тогда действительно - в дворники.Z_h_e писал(а):Правильно ли я понял, что Вы из-за неисправного МК инициализируете ВСЕ регистры?
Впрочем, свое видение я не навязываю. Вольному - воля, пьяному - рай . ©
Последний раз редактировалось Jack_A Сб ноя 05, 2016 11:18:48, всего редактировалось 1 раз.




