Впечатление, что код писался по принципу: занять как можно больше памяти. Навскидку: вместо гаргары
Код:
DDRB |=(1<<2); //транзистор DDRB |=(1<<3); //cветодиод З DDRB |=(1<<4); //cветодиод К DDRB &=~(1<<1); //кнопка
не написать ли
Код:
DDRB =(1<<2) + (1<<3) + (1<<4)
Далее. Все телодвижения при mod==0 и mod==1 на первый взгляд одинаковы, отличаются только условием if (Sec>=5400) или if (Sec>=rantime), так почему бы их не собрать в подпрограмму и вызвать 2 раза ? А еще проще :
Насчет включить оптимизатор - кто же спорит, только лучший оптимизатор - это то, что находится между ушами Переписать на асме - даже и не предлагаю, тапками закидають.
Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2708 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
Запас тапок помешает что ли?
Для вычисления псеводослучайного числа существуют простые алгоритмы. Смутно помнится делал простой алгоритм много лет назад. Точно его не помню. Каждое последующее число получалось путем какой-то простой математической операцией с предыдущим. Но полезные данные брались из середины числа. Например, нужно 8 битное случайно число. Математика производилась над 16 битными числами, но результатом было 8 битное число, отбросив у 16 битного 4 старших и 4 младших бита. Само собой 16 битное число запоминалось, для следующего вычисления. Я точно разрядности не помню. Математику к сожалению тоже, но она была простая. Визуально ряд чисел был хаотичен, и период повторения вроде тоже был приличный.
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
что касается random... наивно полагать, что это на самом деле будет генератор случайных чисел. нет, каждое следующее будет "непердсказуемым" по предыдущему, но при каждом включении питания всегда будет повторяться одна и та же последовательность... в связи с этим не вижу никакого смысла в использовании этой функции... например, я в некоторых своих проектах в качестве "псевдослучайной последовательности" использовал последовательное считывание flash микроконтроллера с накладыванием на полученные байты какой-то XOR-маски. можно сгенерировать псевдослучайную последовательность на основе какого-то циклического алгоритма, отказавшись от библиотечной функции с гарантированно большим периодом повторения...
то есть я предлагаю пойти по пути упрощения требований к решению задачи.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2708 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
Тоже абсолютно не к чему получать большое случайное число, чтобы потом разделить опять на большое. Надо сразу определить предел рандома,Спойлер
Цитата:
/** \ingroup avr_stdlib Highest number that can be generated by random(). */ #define RANDOM_MAX 0x7FFFFFFF
/** \ingroup avr_stdlib The random() function computes a sequence of pseudo-random integers in the range of 0 to \c RANDOM_MAX (as defined by the header file <stdlib.h>).
The srandom() function sets its argument \c seed as the seed for a new sequence of pseudo-random numbers to be returned by rand(). These sequences are repeatable by calling srandom() with the same seed value.
If no seed value is provided, the functions are automatically seeded with a value of 1. */ extern long random(void); /** \ingroup avr_stdlib Pseudo-random number generator seeding; see random(). */ extern void srandom(unsigned long __seed);
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
с чего это вдруг? в однообразной программе, опрашивающей периодически таймер, тактируемый от того же источника, что и ядро МК, получаемые результаты будут строго детерминированы.
при наличии внешних прерываний, поступающих НА САМОМ ДЕЛЕ в непредсказуемые моменты, ваш подход еще как-то может быть оправдан, хотя получаемые числа и в этом случае будут ОЧЕНЬ далеки от случайных и даже от псевдослучайных... и только тактирование таймера от внешнего нестабилизированного генератора как-то может улучшить ситуацию...
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
при наличии внешних прерываний, поступающих НА САМОМ ДЕЛЕ в непредсказуемые моменты, ваш подход еще как-то может быть оправдан, хотя получаемые числа и в этом случае будут ОЧЕНЬ далеки от случайных и даже от псевдослучайных... и только тактирование таймера от внешнего нестабилизированного генератора как-то может улучшить ситуацию...
именно в непредсказуемые моменты и числа при этом получаются случайные. Разумеется в диапазоне 0 - 255
именно в непредсказуемые моменты и числа при этом получаются случайные. Разумеется в диапазоне 0 - 255
Вы ошибаетесь. Не рассказывайте Вашу версию криптографам, они повеселятся. Как и Энштейн с его теорией вероятностей.
_________________ Платы для HLDI - установки лазерной засветки фоторезиста. ФоторезистыOrdyl Alpha 350 и AM 140. Жидкое олово для лужения плат (видео) - самое лучшее и только у меня. Паяльная маска XV501T-4 и KSM-S6189 (5 цветов). Заказ печатных плат - pcbsmac@gmail.com
_________________ Платы для HLDI - установки лазерной засветки фоторезиста. ФоторезистыOrdyl Alpha 350 и AM 140. Жидкое олово для лужения плат (видео) - самое лучшее и только у меня. Паяльная маска XV501T-4 и KSM-S6189 (5 цветов). Заказ печатных плат - pcbsmac@gmail.com
для работающей программы в МК непредсказуемые моменты могут возникать ТОЛЬКО по внешним событиям - я писал про прерывания. любые ВНУТРЕННИЕ события будут однозначно предсказуемыми.
то есть ваш подход сработает для "электронного кубика" или "однорукого бандита". но устройство, генерирующее текст, выбирая слова из массива по "случайному" индексу, будет генерировать всегда одинаковую последовательность фраз, т.е. однозначно предсказуемо.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Да ozonn тупо просто не хочет понять о чём ему пытаются сказать уже несколько человек. Да и хрен бы с ним, чо.
_________________ Платы для HLDI - установки лазерной засветки фоторезиста. ФоторезистыOrdyl Alpha 350 и AM 140. Жидкое олово для лужения плат (видео) - самое лучшее и только у меня. Паяльная маска XV501T-4 и KSM-S6189 (5 цветов). Заказ печатных плат - pcbsmac@gmail.com
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения