这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » avr,gcc avr gcc问题?

共2条 1/1 1 跳转至

avr,gcc avr gcc问题?

院士
2006-09-17 18:14:16     打赏
avr,gcc avr gcc问题?



关键词: 问题    

院士
2006-12-22 22:43:00     打赏
2楼
问 各位大侠:
我用AVR单片机就是因为用51速度不够处理不过来,听说AVR至少是51的10倍速度
,而且C效率极高,但是我用gcc有几个问题:
1:t0中断进入、退出几乎达到60个周期(一大堆PUSH、POP)
2:用函数时,调用、退出10个周期
3:我的20微秒中断一共四个任务,两个都完不成(与51单片机一样,K51编译)
4:程序没有任何毛病,单步执行5-10圈后跑飞进而自动初始化。

环境:mega16l   8MHZ  自己制作的JTAG联机调试看似正常。


提提建议:多谢
1: 不是GCC的问题你是跑RTOS???
因为RTOS每次中断都需要保存恢复状态寄存器,而AVR有33个.所以每次都需要一定的时间.
而你的20uS一次中断也实在是太苛刻了.
建议你改用协作式系统吧!
或者是用一片高速51好了. 2: 同意上面的说法:同意上面的说法:20us也太短了而且你还在中断里面有四个任务,而且用单片机的项目有必要对时间那么苛刻吗? 3: 考虑将你的20us中断改用汇编完成必要时甚至可以让编译器保留若干个全局寄存器供此中断程序专用。
20us8MHz的AVR大约可以执行100来条指令,如果你的4个任务这么多指令完成不了,那只能说你的设计有问题。 4: 谢谢各位我计算了一下,程序可以完成,只不过将调用子程序部分改为宏处理就行,不过gcc如何实现? 5: gcc本身支持宏只要看看C语言基本知识的书籍就可以了。

另外,gcc还支持inline函数,你把被调用的函数放在前面实现,然后把函数说明加上static inline属性。

如:

static inline int foo(int a, int b)
{
    return a+b;
}

static int var;

int main(void)
{
    var=foo(3,4);

    return 0;
}

其实,在调用之前实现的static函数,gcc经常会自动inline。

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]