正在学习使用ICC下的RTOS salvo ,希望与大家交流
ICC 里嵌入了一个微型的RTOS,叫做 salvo 的tiny版本不知哪位用过
我试用了一下~感觉不错
他不是一个很严格意义的RTOS,应该算是任务调度器吧
tiny版得只支持任务切换和二进制信号量
不支持优先级以及消息等,但是效率很高,对于一般的多任务应用也是足够
希望与大家交流 建议使用AVRX吧,支持WINAVR,很好用。支持优先级以及消息等,效率很高,使用汇编编写。哈哈,最近正在学习,顺便推销一下。 听说AVRX这个操作系统已经好几年没有更新了
而且必须转到GCC上来,对于使用ICC的不是很方便
主要是我觉得GCC的浮点效率太低了
曾经做过一个对比,做三角函数,ICC的速度比GCC快好几倍 摘自"http://www.atmanecl.com/ChineseSite/CCCC.htm"
"几种AVR C语言编译器的比较"
在代码效率和速度方面,IAR,CodeVisionAVR,ICCAVR和AtmanAvr比较如下:
对下面的程序进行代码效率分析:
void Delay(void)
{
unsigned char a, b;
for (a =1;a;a++)
for (b =1;b;b++)
;
}
void LED_On(int i){ PORTB=~(1<<i); Delay();
}
void main(void)
{
int i;
MCUCR=0x00;
DDRB =0xFF;
PORTB =0xFF;
while (1)
{
for (i =0;i <8;i++)
LED_On(i);
for (i =8;i >0;i--)
LED_On(i);
for (i =0;i <8;i +=2)
LED_On(i);
for (i =7;i >0;i -=2)
LED_On(i);
}
}
编译后生成的程序代码 编译器 程序代码字节数
IAR 413
ICCAVR 311
CodeVisionAVR 327
AtmanAvr(GCC) 211
KEIL51 136 LED 变化的速度明显慢得多
注:对于KEIL PORTB 换成P1,对于AtmanAvr 'void main' 换成 'int main'。
对一个浮点运算程序进行代码速度分析:
void main(void)
{
float x,y,z;
x = 1.0;
y = 2.0;
z = sin(x+y);
}
编译后生成的代码和在8MHz 晶振下运行所需时间对比如下: 编译器 程序代码字节数 执行时间(8MHz) 效率
IAR 1237 747.5us 7.09
ICCAVR 1991 950.75us 5.58
CodeVisionAVR 1267 521us 10.17
AtmanAvr(GCC) 1292 728.25us 7.28
KEIL51 1403 5.301ms 1
注:对于AtmanAvr 'void main' 换成 'int main'。 以上例子(虽然不完整)可以看出,对于浮点运算,GCC还是比ICCAVR高的。
以前也用ICC,可是发现生成的代码一般很大,效率较低,所以放弃了... testcode谢谢你的测试
不过上次我也是做了测试的
过会再去做以下~~然后汇报结果 刚才又作了测试果然是GCC要快啊
可是上次我记得结果明明是GCC慢~~真是见了鬼了
另:我看介绍说AVRX操作系统下,响应中断需要211个时钟周期,对于10MHz的晶振就需要花费20微秒了阿
不知道他在任务调度的时候是否要关闭中断,如果是的话那么响应中断的最坏情况岂不是要30微秒左右了?
这有些不能接受了阿~ salvo 的tiny 是要钱的呀!那里有免费的? 我这里有一个~~
希望大家有时间玩玩
也好交流
点击此处下载armok0167306.rar 关于操作系统中断所需的周期问题:
这不是AVRX的问题,因为操作系统一般都要
1。把至少要把所有的32个寄存器以及PC,STACK,SREG等先保存到任务STACK。用PUSH操作,至少70多个周期;
2。判断任务的优先,执行任务
3。结束时把STACK中的内容重新取出。用POP操作,至少70多个周期;
所以200多个时钟周期可以理解。
如果是用C编写,相信周期可能会更加长。 不过对于中断的响应的影响主要还是入辗保护
我觉得这个如果在80周期以下基本还是可以接受的 自己顶一下,这次提供的是salvo的技术文档和我写的一个简单入门介绍
点击此处下载salvo for ICC文档 我也想学这方面的,多谢Violit 我是新手!我对表还不是很懂,我未来的工作可能会运用到很多关于标格的运用知识!我想现在多学习一些这方面的知识,请问去什么地方学习比较好!或是有人愿意在网上指导的也很感激不尽.....QQ30823183先谢谢大家! 下载玩一玩
页:
[1]