реклама на сайте
подробности

 
 
> Помогите переписать код для GCC под IAR
smk
сообщение Feb 1 2012, 16:39
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 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? Спасибо.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
smk
сообщение Feb 1 2012, 19:22
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 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;
}


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 4th August 2025 - 08:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01396 секунд с 7
ELECTRONIX ©2004-2016