|
Помогите переписать код для GCC под IAR |
|
|
|
Feb 1 2012, 16:39
|
Гуру
     
Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446

|
Суть такова: помещаем массив во flash и потом побайтно читаем. В GCC: Код unsigned char brightness[256] PROGMEM = //табличка визуально равномерно наращивающая яркость {0,0,0,1,1,2,2,3,3,4,4,4,5,5,6,6,6,7,7,8,8,8,9,9,10,10,10,11,11,12,12, 12,12,13,13,13,13,13,14,14,14,14,15,15,15,16,16,16,16,17,17,17,18,18, 18,19,19,19,19,20,20,20,21,21,21,22,22,22,22,23,23,23,24,24,24,25,25, 25,25,26,26,26,27,27,27,28,28,28,28,29,29,30,30,31,31,32,32,33,34,34, 35,35,36,37,38,38,39,40,41,41,42,43,44,44,45,46,47,48,48,49,50,51,52, 52,53,54,55,56,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,74, 75,76,77,78,79,80,82,83,84,86,87,88,89,91,92,94,95,97,99,101,102,104, 106,107,109,111,113,114,116,118,120,122,123,125,127,129,131,134,136, 138,140,142,145,147,149,151,153,156,158,160,162,164,167,169,171,173, 175,177,179,182,184,186,188,190,192,193,195,197,198,200,202,203,205, 206,208,210,211,213,215,217,218,220,222,223,225,226,228,229,231,232, 233,235,236,237,239,240,241,242,243,244,245,246,247,249,250,251,252, 253,254,255};
if((pwm>pgm_read_byte(&brightness[count_pwm]))|(pwm==0)){sig_off;} А как такое делается в IAR? Спасибо.
--------------------
Живи днем так, чтобы ночью ты спал спокойно.
|
|
|
|
|
 |
Ответов
|
Feb 1 2012, 19:22
|
Гуру
     
Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446

|
Оптимизация максимальная по размеру. Код #include <ioavr.h> #include <intrinsics.h>
#include <stdio.h>
#define sig_off PORTB &= ~(1<<2)//âêë êîíòðîëüíûé ñâåòîäèîä #define sig_on PORTB |= (1<<2) //âûêë êîíòðîëüíûé ñâåòîäèîä #define sensibility 120//50 //÷óâñòâèòåëüíîñòü //#define div_on_off 200//200 ñêîðîñòü ïëàâíîãî çàæèãàíèÿ/ãàøåíèÿ //#define set_time 2 //ïàóçà ïåðåä ãàøåíèåì â ñåêóíäàõ
__flash const unsigned char brightness[256] = //òàáëè÷êà âèçóàëüíî ðàâíîìåðíî íàðàùèâàþùàÿ ÿðêîñòü {0,0,0,1,1,2,2,3,3,4,4,4,5,5,6,6,6,7,7,8,8,8,9,9,10,10,10,11,11,12,12, 12,12,13,13,13,13,13,14,14,14,14,15,15,15,16,16,16,16,17,17,17,18,18, 18,19,19,19,19,20,20,20,21,21,21,22,22,22,22,23,23,23,24,24,24,25,25, 25,25,26,26,26,27,27,27,28,28,28,28,29,29,30,30,31,31,32,32,33,34,34, 35,35,36,37,38,38,39,40,41,41,42,43,44,44,45,46,47,48,48,49,50,51,52, 52,53,54,55,56,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,74, 75,76,77,78,79,80,82,83,84,86,87,88,89,91,92,94,95,97,99,101,102,104, 106,107,109,111,113,114,116,118,120,122,123,125,127,129,131,134,136, 138,140,142,145,147,149,151,153,156,158,160,162,164,167,169,171,173, 175,177,179,182,184,186,188,190,192,193,195,197,198,200,202,203,205, 206,208,210,211,213,215,217,218,220,222,223,225,226,228,229,231,232, 233,235,236,237,239,240,241,242,243,244,245,246,247,249,250,251,252, 253,254,255};
volatile unsigned int adc_data;//íàïðÿæåíèå íà âûõîäå ÈÊ äàò÷èêà òåêóùåå volatile unsigned int _adc_data;//íàïðÿæåíèå íà âûõîäå ÈÊ äàò÷èêà ïðåäèäóùåå volatile unsigned int tick_count,dev_pwm;//äåëèòåëü ÷àñòîòû ØÈÌ volatile unsigned char status_flag,delta,pwm,my_time,count_pwm,detect;//ñêîðîñòü èçìåíåíèÿ (îòñ÷åòîâ ÀÖÌ / 50 ìñ) volatile unsigned char div_on_on, div_on_off, set_time;
unsigned int read_adc (void) { ADCSRA |= (1<<6); while (!(ADCSRA & (1<<4))); return ADC; }
#pragma vector=TIM0_OVF_vect __interrupt static void timer0_ovf_isr( void )//26087 hz { TCNT0 = 0xD2; //set count if(dev_pwm==700)//700 { dev_pwm=0; TCCR0B = 0x00; //stop timer adc_data=read_adc(); if(adc_data>=_adc_data) delta=adc_data - _adc_data;//âû÷èñëÿåì èçìåíåíèå çà âðåìÿ îò ïðåäèäóùåãî ïðåðûâàíèÿ îò òàéìåðà else delta=_adc_data - adc_data; _adc_data = adc_data;//çàïîìèíàåì òåêóùåå çíà÷åíèå ñèãíàëà îò ÈÊ äàò÷èêà if(delta>sensibility) { detect=255; status_flag=1; } else {detect=0;} TCCR0B = 0x02; //start timer } if((pwm>(brightness[count_pwm]))|(pwm==0)){sig_off;} else {sig_on;} ++dev_pwm; ++pwm; ++tick_count; }
void main(void) { ADMUX=0x43; //0b01000011; ADCSRA=0x86; //0b10000110; PORTB=0x10; //0b00010000; DDRB=0x04; //0b00000100; TCNT0 = 0xD2; //set count TCCR0A = 0x00; TCCR0B = 0x02; //start timer TIMSK0 = 0x02; //timer interrupt sources if(PINB & (1<<4)) //PB4==1? {//ðåçèñòîð îòïàÿí div_on_on=10; div_on_off=10; set_time=1; } else {//ðåçèñòîð ïðèïàÿí div_on_on=200; div_on_off=200; set_time=60; } __enable_interrupt();
while(1) { if(status_flag==0) { tick_count=0; } if(status_flag==1) { for(;;) { if(tick_count==div_on_on) { if(count_pwm==255) { count_pwm=255; status_flag=2; tick_count=0; break; } tick_count=0; ++count_pwm; } } } if(status_flag==2) { for(;;) { if(tick_count==26087) { if(my_time==set_time) { tick_count=0; my_time=0; status_flag=3; break; } tick_count=0; ++my_time; } if(detect==255) { my_time=0; } } } if(status_flag==3) { for(;;) { if(tick_count==div_on_off) { if(count_pwm==0) { tick_count=0; count_pwm=0; status_flag=0; break; } tick_count=0; --count_pwm; } if(detect==255) { status_flag=1; break; } } }
} //return 0; }
--------------------
Живи днем так, чтобы ночью ты спал спокойно.
|
|
|
|
Сообщений в этой теме
smk Помогите переписать код для GCC под IAR Feb 1 2012, 16:39 shmur Объявить как const и IAR сам поместит в ro секцию.... Feb 1 2012, 16:54 _Артём_ Цитата(shmur @ Feb 1 2012, 18:54) Объявит... Feb 1 2012, 17:18  smk Цитата(_Артём_ @ Feb 1 2012, 19:18) Нет н... Feb 1 2012, 17:21 _Артём_ Цитата(smk @ Feb 1 2012, 18:39) Суть тако... Feb 1 2012, 17:09 smk Сделал #pragma location="PROGMEM". Тепер... Feb 1 2012, 17:15 _Артём_ Цитата(smk @ Feb 1 2012, 19:15) Сделал #p... Feb 1 2012, 17:30 shmur Цитата(smk @ Feb 1 2012, 20:15) Сделал #p... Feb 1 2012, 17:34  _Артём_ Кстати, а что за проц?
Я про АВР писал, у других а... Feb 1 2012, 18:06   smk Цитата(_Артём_ @ Feb 1 2012, 20:06) Кстат... Feb 1 2012, 18:23    _Артём_ Цитата(smk @ Feb 1 2012, 20:23) Tiny13a
... Feb 1 2012, 18:31     smk Цитата(_Артём_ @ Feb 1 2012, 20:31) Что-т... Feb 1 2012, 18:45      _Артём_ Цитата(smk @ Feb 1 2012, 20:45) Попробова... Feb 1 2012, 18:53 SSerge способов куча, смотря что нужно.
1. через #pragma... Feb 1 2012, 18:07 Сергей Борщ QUOTE (smk @ Feb 1 2012, 21:22) Оптимизац... Feb 1 2012, 20:17 _Артём_ Цитата(smk @ Feb 1 2012, 21:22) Оптимизац... Feb 1 2012, 21:31 smk Уменьшил CSTACK до 0x0f и тоже собралось. Получило... Feb 2 2012, 08:30 Сергей Борщ QUOTE (smk @ Feb 2 2012, 09:42) ИАР выдае... Feb 2 2012, 08:37 smk Сделал везде по 1 варианту. Это пока дало наилучши... Feb 2 2012, 09:52 Сергей Борщ QUOTE (smk @ Feb 2 2012, 11:52) Сделал ве... Feb 2 2012, 10:45 smk По последним данным GCC 936 байт, а IAR 770 байт, ... Feb 2 2012, 17:47 smk Самый лучший результат составил 750 байт. В железе... Feb 4 2012, 10:52
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|