搜索
bottom↓
回复: 15

贴一个半成品,mega128的UCOS改进版

[复制链接]

出0入0汤圆

发表于 2009-7-6 23:08:54 | 显示全部楼层 |阅读模式
winavr 2009版
保留了event mutex sem
队列邮箱flag都删掉了,这些东西个人认为没啥用
时钟节拍处理还是采用了ucos减计数的方式,抛弃了freertos的链表方式
中断处理结合了freertos方式
无任何汇编代码
抛弃了传统移植中的os_cpu.c os_cpu.asm
全部移植均采用C语言的函数

抛弃了原始的ucos_ii.c那种include方式

点击此处下载 ourdev_458999.rar(文件大小:180K) (原文件名:newos-6-19.rar)

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

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

出0入0汤圆

发表于 2009-7-7 06:49:01 | 显示全部楼层
顶楼主。

个人移植ucOS,空闲不运行空闲任务,而运行主函数。


时钟节拍处理还是采用了ucos减计数的方式,抛弃了freertos的链表方式
----------------------------------------------------------------
没太注意ucos节拍计数。是每个节拍,每个任务(或者是等待延时的任务)都要进行减节拍计数吗?
small rtos节拍计数如此。个人不太喜欢这种计数方法,但好像没有更好的办法。


中断处理结合了freertos方式
------------------------------------
对于AVR,我的做法是用 一般任务切换代替中断任务切换。即用OsCtxSw代替OSIntCtxSw。
中断切换任务改成中断先保护寄存器(由C编译器自动完成,中断写法和一般中断写法一样),然后再主动调用OsCtxSw进行任务切换。
任务切换只存在主动切换。断点保护也不保护所有寄存器。
(这种做法只适合不支持硬件中断嵌套的MCU)

出0入0汤圆

发表于 2009-7-7 10:52:59 | 显示全部楼层
不错!下载了,谢谢!
严重优化UCOS,^_^

出0入0汤圆

发表于 2009-7-7 11:04:49 | 显示全部楼层
不错,下了谢谢!

出0入0汤圆

 楼主| 发表于 2009-7-8 22:50:28 | 显示全部楼层
2楼,减计数其实也是一个不错的办法,不用考虑时钟节拍计数器的溢出。
如果采用延时链表,首先需要将延时的任务排序,这里是一笔不小的开销。
当然,拍完后只需比较最上面的一个延时任务。
可经过我示波器观察,发现关中断时间还不短,因此最后舍弃了延时链表方式,采用原始的减计数。

至于空闲任务,我还是那个说法。
为了思路清晰,没必要舍弃空闲任务。
并没有带来多大的开销。

所有中断都支持中断嵌套。

出0入0汤圆

发表于 2009-7-10 10:50:11 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-7-11 00:23:44 | 显示全部楼层
zhichi 支持

出0入0汤圆

发表于 2009-7-11 08:49:22 | 显示全部楼层
支持

出0入4汤圆

发表于 2009-7-11 09:01:46 | 显示全部楼层
MARK

出0入0汤圆

发表于 2009-7-29 14:58:36 | 显示全部楼层
这位ralfak 大哥,我为什么装进AVR Studio仿真跑会出现问题呢?路不进TASK1或2中。好像是跑飞了。PIN脚从来没有动过。我自己建项目就编译不过。为什么啊。是不是MAKEFILE要修改啊?用AVR Studio自动生成的不行吧?我用官方的也不能编译过,出一大堆的错。谢谢指点。

出0入0汤圆

发表于 2009-7-30 17:01:16 | 显示全部楼层
今天跟踪了一下,是跑进了空闪程序,再也不出来了。为什么会这样呢?

出0入0汤圆

 楼主| 发表于 2009-8-19 01:29:22 | 显示全部楼层
9-10楼,编译器为winavr-200903版
不要导入项目,直接用命令行make,make clean即可,然后用AVRSTUDIO装入myos.exf,编译是没问题的,仿真也没问题,没长时间测试过。

出0入0汤圆

 楼主| 发表于 2009-8-19 02:36:55 | 显示全部楼层
有一处bug
在core.c里面
多了一个  OS_EXIT_CRITICAL();
会产生未知错误
void OS_ISR_Sched(void)
{
    INT8U   y;
    OS_ENTER_CRITICAL();
    /*
    没加锁的情况下允许调度
    */
    if (OSLockNesting == 0)                        /* ... scheduler is not locked                  */
    {
        y   = OSUnMapTbl[OSRdyGrp];
        OSPrioHighRdy = (INT8U)((y << 3) + OSUnMapTbl[OSRdyTbl[y]]);
        if (OSPrioHighRdy != OSPrioCur)            /* No Ctx Sw if current task is highest rdy     */
        {
            OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
//                OSCtxSwCtr++;                          /* Increment context switch counter             */
            OSMissedSchedu = OS_TRUE;                /*通知中断有新的高优先级任务就绪                */

        }
    }
    OS_EXIT_CRITICAL();
}

出0入0汤圆

 楼主| 发表于 2009-8-19 02:38:13 | 显示全部楼层
重新打包一下代码
点击此处下载 ourdev_472451.rar(文件大小:216K) (原文件名:newos-6-19.rar)
软件硬件调试时请自行修改延时

出0入0汤圆

发表于 2009-11-23 09:54:49 | 显示全部楼层
mark

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-5-20 16:06

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

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