作者共发了4篇帖子。 内容转换:不转换▼
 
点击 回复
558 3
[教程]在GCC-AVR程序中访问Flash程序存储器
一派护法 十九级
1楼 发表于:2015-7-6 19:54
原文:http://blog.csdn.net/jinling1441/article/details/5430706
avr-libc 支持头文件:pgmspace.h
#include <avr/pgmspace.h>

在ICC AVR下的代碼:
flash unsigned char seg8[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
但是在GCC-AVR中卻要使用:
const unsigned char seg8[] PROGMEM = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};

以前本來可以這樣寫的:
const prog_uchar seg8[] =  {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
但 是在Fedora Linux 22中,頭文件avr/pgmspace.h裡面的注釋里已經明確聲明了這種寫法已經不贊成使用了(deprecated),如果不定義(define) 特殊的宏(這個目前我還暫時沒找到),是無法再用這種寫法的。所以還是用PROGMEM後置那種寫法吧。

調用數組時,不能再像WinAVR中用seg8[5]那種調用方法了,應該改成:pgm_read_byte(seg8 + 5)。當然seg8[0]就該改成pgm_read_byte(seg8 + 0)或者直接pgm_read_byte(seg8)。
一派护法 十九级
2楼 发表于:2015-7-6 19:54
以下是一個4位數碼管顯示數字1970~2038的案例:
#include <avr/io.h>
#include <avr/pgmspace.h>
#define F_CPU 8000000UL
#include <util/delay.h>

const unsigned char seg8[] PROGMEM = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
int number = 1970;

/* 7-segment display */
void Seg8_Display()
{
    PORTC &= ~_BV(4);
    PORTA = pgm_read_byte(seg8 + number % 10000 / 1000);
    _delay_ms(1);
    PORTC = PORTA = 0xff;
   
    PORTC &= ~_BV(5);
    PORTA = pgm_read_byte(seg8 + number % 1000 / 100);
    _delay_ms(1);
    PORTC = PORTA = 0xff;
       
    PORTC &= ~_BV(6);
    PORTA = pgm_read_byte(seg8 + number % 100 / 10);
    _delay_ms(1);
    PORTC = PORTA = 0xff;
   
    PORTC &= ~_BV(7);
    PORTA = pgm_read_byte(seg8 + number % 10);
    _delay_ms(1);
    PORTC = PORTA = 0xff;
}

int main()
{
    unsigned char count = 0;
    DDRA = DDRB = DDRC = DDRD = 0xff;
    PORTA = PORTB = PORTC = PORTD = 0xff;
   
    while (1)
    {
        Seg8_Display();
        PORTB = 0x00;
        count++;
        if (count >= 250)
        {
            count = 0;
            number++;
            if (number > 2038)
                number = 1970;
        }
    }
}
一派护法 十九级
3楼 发表于:2015-7-6 19:57
一派护法 十九级
4楼 发表于:2015-7-6 20:03

回复帖子

内容:
用户名: 您目前是匿名发表
验证码:
(快捷键:Ctrl+Enter)
 

本帖信息

点击数:558 回复数:3
评论数: ?
作者:巨大八爪鱼
最后回复:巨大八爪鱼
最后回复时间:2015-7-6 20:03
 
©2010-2024 Arslanbar Ver2.0
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。