搜索
bottom↓
回复: 15

正在学习使用ICC下的RTOS salvo ,希望与大家交流

[复制链接]

出0入0汤圆

发表于 2005-9-2 22:30:26 | 显示全部楼层 |阅读模式
ICC 里嵌入了一个微型的RTOS,叫做 salvo 的tiny版本

不知哪位用过

我试用了一下~感觉不错

他不是一个很严格意义的RTOS,应该算是任务调度器吧

tiny版得只支持任务切换和二进制信号量

不支持优先级以及消息等,但是效率很高,对于一般的多任务应用也是足够

希望与大家交流

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2005-9-2 23:10:27 | 显示全部楼层
建议使用AVRX吧,支持WINAVR,很好用。支持优先级以及消息等,效率很高,使用汇编编写。哈哈,最近正在学习,顺便推销一下。

出0入0汤圆

 楼主| 发表于 2005-9-3 08:15:05 | 显示全部楼层
听说AVRX这个操作系统已经好几年没有更新了

而且必须转到GCC上来,对于使用ICC的不是很方便

主要是我觉得GCC的浮点效率太低了

曾经做过一个对比,做三角函数,ICC的速度比GCC快好几倍

出0入0汤圆

发表于 2005-9-3 13:34:20 | 显示全部楼层
摘自"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'。

出0入0汤圆

发表于 2005-9-3 13:39:54 | 显示全部楼层
以上例子(虽然不完整)可以看出,对于浮点运算,GCC还是比ICCAVR高的。

以前也用ICC,可是发现生成的代码一般很大,效率较低,所以放弃了...

出0入0汤圆

 楼主| 发表于 2005-9-3 16:11:01 | 显示全部楼层
testcode谢谢你的测试

不过上次我也是做了测试的

过会再去做以下~~然后汇报结果

出0入0汤圆

 楼主| 发表于 2005-9-3 19:42:59 | 显示全部楼层
刚才又作了测试果然是GCC要快啊

可是上次我记得结果明明是GCC慢~~真是见了鬼了



另:我看介绍说AVRX操作系统下,响应中断需要211个时钟周期,对于10MHz的晶振就需要花费20微秒了阿

不知道他在任务调度的时候是否要关闭中断,如果是的话那么响应中断的最坏情况岂不是要30微秒左右了?

这有些不能接受了阿~

出0入0汤圆

发表于 2005-9-3 19:43:14 | 显示全部楼层
salvo 的tiny 是要钱的呀!那里有免费的?

出0入0汤圆

 楼主| 发表于 2005-9-3 21:06:46 | 显示全部楼层
我这里有一个~~

希望大家有时间玩玩

也好交流



点击此处下载armok0167306.rar

出0入0汤圆

发表于 2005-9-4 01:58:13 | 显示全部楼层
关于操作系统中断所需的周期问题:

这不是AVRX的问题,因为操作系统一般都要

1。把至少要把所有的32个寄存器以及PC,STACK,SREG等先保存到任务STACK。用PUSH操作,至少70多个周期;

2。判断任务的优先,执行任务

3。结束时把STACK中的内容重新取出。用POP操作,至少70多个周期;

所以200多个时钟周期可以理解。

如果是用C编写,相信周期可能会更加长。

出0入0汤圆

 楼主| 发表于 2005-9-4 12:52:40 | 显示全部楼层
不过对于中断的响应的影响主要还是入辗保护

我觉得这个如果在80周期以下基本还是可以接受的

出0入0汤圆

 楼主| 发表于 2005-9-7 00:32:57 | 显示全部楼层
自己顶一下,这次提供的是salvo的技术文档和我写的一个简单入门介绍

点击此处下载salvo for ICC文档

出0入0汤圆

发表于 2008-8-30 19:06:35 | 显示全部楼层
我也想学这方面的,多谢Violit

出0入0汤圆

发表于 2010-10-14 17:36:58 | 显示全部楼层
我是新手!我对表还不是很懂,我未来的工作可能会运用到很多关于标格的运用知识!我想现在多学习一些这方面的知识,请问去什么地方学习比较好!或是有人愿意在网上指导的也很感激不尽.....QQ30823183先谢谢大家!

出0入0汤圆

发表于 2010-12-24 11:37:00 | 显示全部楼层
下载玩一玩
头像被屏蔽

出0入0汤圆

发表于 2011-9-9 13:54:08 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-16 08:55

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表