Например TDA7294

Форум РадиоКот • Просмотр темы - Уменьшение веса кода с 4kb до 1kb
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср апр 24, 2024 09:46:19

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


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



Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Уменьшение веса кода с 4kb до 1kb
СообщениеДобавлено: Вт фев 07, 2017 18:59:23 
Встал на лапы

Зарегистрирован: Вс май 08, 2016 22:45:48
Сообщений: 131
Рейтинг сообщения: -3
Прошу помочь урезать код, чтобы он влез в attiny13a.
Спойлер
Код:
#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; // vatiable for 0 to 1
volatile uint8_t amount; //vatiable for 0 to 12 need for 12 reps ot one side and back
volatile uint8_t i; //vatiable for 0 to 10 need fo timer
volatile uint16_t Sec; //variable for count the number of second
volatile uint16_t SecF=0;// variable for make 5 second delay working mode, and than off.
int rantime; // variable for make random number.

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

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


static void pulcesDREAMon(void){
   for ( amount = 0; amount < 12; amount++ ) //this function make 11 times on/off ransistor of number 1
    {
      PORTB |= TRANSON;
      _delay_ms(500);
      PORTB &= ~TRANSON;
     _delay_ms(1000);
   }
}

static void pulcesDREAMoff(void){
   for ( amount = 0; amount < 12; amount++ ) //this function make 11 times on/off ransistor of number 2
    {
      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){ //repeating a piece of text repeat
      SecF=5; //this variable need for check how much time passed
   Sec = 0;
}

static void povtor_per2(void){ //repeating a piece of text repeat
      SecF=3000; //this variable need for disable funtion which off the mode
   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; //work for the exit

   rantime = 1800 + random() % 5400; //make random number between 30 min and 2 hours.

while (1){
  if (mod==0){
     if (Sec>=1800){
        pulcesDREAMon(); //on the need mode and give them to work 5 sek.
      povtor_per();
     }

    if (Sec>=SecF){ //check how much time passed
        pulcesDREAMoff();
      povtor_per2();
     }
   
  }

  if (mod==1){
     if (Sec>=rantime){
        pulcesDREAMon(); //on the need mode and give them to work 5 sek.
      povtor_per();
      rantime = 1800 + random() % 5400;
     }

    if (Sec>=SecF){
        pulcesDREAMoff(); //check how much time passed
      povtor_per2();
     }
   
     }



  if (PINB & BTN){ //just a function button processing
     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();
  }
}
}



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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Уменьшение веса кода с 4kb до 1kb
СообщениеДобавлено: Вт фев 07, 2017 22:22:10 
Грызет канифоль

Карма: 9
Рейтинг сообщений: 80
Зарегистрирован: Чт ноя 06, 2014 13:09:06
Сообщений: 251
Рейтинг сообщения: 0
Чем собираешь?
gcc-4.8.2 с опцией -Os твой код в 574 байт скомпилировал. +надо добавить startup + вектора + внешние функции (беглый просмотр, что это _delay_ms())
Как _delay_ms() у тебя реализован, я не знаю. А что возможности посмотреть карту памяти в твоей среде нет? Если есть - посмотри, что так жрет и решай как решить.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Уменьшение веса кода с 4kb до 1kb
СообщениеДобавлено: Ср фев 08, 2017 16:32:45 
Встал на лапы

Зарегистрирован: Вс май 08, 2016 22:45:48
Сообщений: 131
Рейтинг сообщения: 0
Собираю в avr sudio 4. Как память отследить - гуглил, но чет не понял. Знаю только что выше 6 там в отчете пишется, но у меня не тянет такой софт.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Уменьшение веса кода с 4kb до 1kb
СообщениеДобавлено: Ср фев 08, 2017 17:11:25 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 1
Медали: 1
Получил миской по аватаре (1)
sTRog писал(а):
Прошу помочь урезать код, чтобы он влез в attiny13a
Урезал :
Спойлер
Код:
int main(void){

}
В attiny13a точно влезет.


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Уменьшение веса кода с 4kb до 1kb
СообщениеДобавлено: Ср фев 08, 2017 18:12:18 
Грызет канифоль

Карма: 9
Рейтинг сообщений: 80
Зарегистрирован: Чт ноя 06, 2014 13:09:06
Сообщений: 251
Рейтинг сообщения: 0
sTRog, вроде в AVR студии gcc и используется. Как там из среды запускать - не знаю, не ставил студию. Если там gcc - ищи в своей установке студии консольные приложения, с именами что-то типа avr-gcc*.exe, avr-objdump*.exe... Есть такие? Если есть, то любо сам можешь посмотреть их использование, либо сюда их название - может сможем пмочь.


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Уменьшение веса кода с 4kb до 1kb
СообщениеДобавлено: Ср фев 08, 2017 18:23:06 
Электрический кот
Аватар пользователя

Карма: 8
Рейтинг сообщений: 128
Зарегистрирован: Чт июн 20, 2013 00:00:58
Сообщений: 1031
Откуда: москва, м.Сходненская
Рейтинг сообщения: 0
реализовать stdlib.h (random() % 5400) на свободном таймере (сабака)
либо так:
Код:
while (1){
unsigned int rnd++;
if(rnd>5400) rnd=0;
.....
rantime = 1800 + rnd; // random() % 5400;
.....

пол тиньки останется свободной....


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Уменьшение веса кода с 4kb до 1kb
СообщениеДобавлено: Ср фев 08, 2017 19:19:37 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2694
Откуда: г. Чайковский
Рейтинг сообщения: 1
Медали: 1
Получил миской по аватаре (1)
1. Включить оптимизацию для начала.
2. Использовать режим CTC таймера.
3. Использовать 8ми битные переменные, зачем считать 1800, когда можно до 18?
4. Оптимизировать алгоритм, использовать поменьше сравнений.
5. Не использовать volotile переменные без необходимости.
6. Взять МК с 32кБ флеша ;)
7. Понять что случайностей не бывает и все предопределено :) , особенно в ПСЕВДОслучайной последовательности и убедится что при старте МК rantime всегда инициализируется одним и тем же совершенно случайным числом.
8. Написать ТЗ и дать денежку тому кто сделает. Хотите сделаю? Но сначала ТЗ почитаю конечно (это если что в личку).

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Уменьшение веса кода с 4kb до 1kb
СообщениеДобавлено: Ср фев 08, 2017 19:29:27 
Встал на лапы

Зарегистрирован: Вс май 08, 2016 22:45:48
Сообщений: 131
Рейтинг сообщения: 0
viiv писал(а):
sTRog, вроде в AVR студии gcc и используется. Как там из среды запускать - не знаю, не ставил студию. Если там gcc - ищи в своей установке студии консольные приложения, с именами что-то типа avr-gcc*.exe, avr-objdump*.exe... Есть такие? Если есть, то любо сам можешь посмотреть их использование, либо сюда их название - может сможем пмочь.

По адрессу C:\avr\avr8-gnu-toolchain\bin есть .exe avr-gcc.exe но я не понял, как ее запускать, если тупо два раза кликнуть то на мгновений открывается консольное окно, а затем сразу же закрывается.

Mishany писал(а):
реализовать stdlib.h (random() % 5400) на свободном таймере (сабака)
либо так:

Спасибо. А не подскажите, где можно почитать о функциях рандом на си для микроконтролеров? Читал о генерации псевдослучайных чисел на регистре сдвига, но так и не нашел примеров под attiny 13 или принципов написание, которые уже можно было бы подстроить


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Уменьшение веса кода с 4kb до 1kb
СообщениеДобавлено: Ср фев 08, 2017 20:47:54 
Электрический кот
Аватар пользователя

Карма: 8
Рейтинг сообщений: 128
Зарегистрирован: Чт июн 20, 2013 00:00:58
Сообщений: 1031
Откуда: москва, м.Сходненская
Рейтинг сообщения: 0
Инкремент переменной в цикле с произвольным во времени обращением к ней и есть рандомное значение, да банальный шум на ацп....
Как часто нужно рандомное значение?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Уменьшение веса кода с 4kb до 1kb
СообщениеДобавлено: Чт фев 09, 2017 00:40:49 
Встал на лапы

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

Максимальная частота запроса - раз в пол часа.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Уменьшение веса кода с 4kb до 1kb
СообщениеДобавлено: Чт фев 09, 2017 05:11:13 
Электрический кот
Аватар пользователя

Карма: 8
Рейтинг сообщений: 128
Зарегистрирован: Чт июн 20, 2013 00:00:58
Сообщений: 1031
Откуда: москва, м.Сходненская
Рейтинг сообщения: 0
Тема закрыта, вопрос решен.


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

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


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

Сейчас этот форум просматривают: AndrNet и гости: 43


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

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


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