SCH51-RTOS-V1.40.rar

  • PUDN用户
    了解作者
  • C/C++
    开发工具
  • 628KB
    文件大小
  • rar
    文件格式
  • 1
    收藏次数
  • 1 积分
    下载积分
  • 4
    下载次数
  • 2013-11-20 12:54
    上传日期
这是一个51下的RTOS,如果你感兴趣的话,可以看一下: 建议大家阅读代码的顺序为:config.h SCH51.h SCH51.C main.c T0_init.h T0_init.c TASK.h task.c 。当然,你也可以把他一直到其他系统下。。。
SCH51-RTOS-V1.40.rar
  • SCH51 RTOS V1.40
  • pdf
  • T0_INIT.h.pdf
    49.2KB
  • CONFIG.h.pdf
    80.6KB
  • INCLUDES.h.pdf
    39.7KB
  • SCH51.h.pdf
    63.9KB
  • T0_init.c.pdf
    93.5KB
  • Main.c.pdf
    57.2KB
  • task.c.pdf
    51.3KB
  • TASK.h.pdf
    49.3KB
  • Sch51.c.pdf
    77.6KB
  • debug
  • T0_init.obj
    8.5KB
  • SCH51_App
    26.9KB
  • SCH51_App.hex
    3.8KB
  • Sch51.obj
    8.5KB
  • task.obj
    5.9KB
  • SCH51_App.plg
    1.2KB
  • SCH51_App.lnp
    158B
  • Main.obj
    6.1KB
  • SCH51
  • T0_init.c
    5.1KB
  • T0_init.h
    615B
  • config.h
    4.7KB
  • Sch51.h
    2KB
  • Sch51.c
    3.5KB
  • includes.h
    585B
  • user
  • T0_init.lst
    9.9KB
  • Main.c
    1.8KB
  • SCH51_App_uvopt.bak
    64.7KB
  • SCH51_App.m51
    17.4KB
  • SCH51_App.uvgui.Administrator
    71KB
  • Sch51.lst
    6.4KB
  • SCH51_App.uvopt
    62.3KB
  • SCH51_App_uvproj.bak
    13.7KB
  • Main.LST
    3.8KB
  • task.lst
    3.3KB
  • SCH51_App.uvproj
    13.7KB
  • picture
  • Pulse_Keil.jpg
    99.6KB
  • task
  • task.c
    1.5KB
  • task.h
    680B
  • readme.txt
    5.2KB
内容介绍
*************************************************************************************************** 一些注意事项: 代码的最新版本 SCH51 V1.45 已经发布,有兴趣的话,可在www.openedv.com上进行搜索,或者与作者直接联系 建议大家阅读代码的顺序为:config.h SCH51.h SCH51.C main.c T0_init.h T0_init.c TASK.h task.c 。 大家如果对代码中的某些算法有更高意识的意见或建议时,可以给我留言。你的建议可能 be part of the new version ! 在聊这个操作系统之前,我们先来聊点题外话。后面,我会贴出所有代码,并且附上完整的工程文件给大家。 请注意,以下讨论的内容,都是以51单片机为硬件平台的,但是,本文所述的重点内容并不拘泥于某一种特定的处理器,大家可以回去把代码移植到STM32、S3C2440、以及一些DSP上去,因为本代码并未涉及任何堆栈处理。 这里我想表达的不是程序的算法,而是一种本人称之为“面向任务”的项目开发思想(如果你学过C++、JAVA并且理解什么是“面向对象”那就最好了,你应该明白我说的“面向任务”是个什么意思)。之所以以51为平台,是因为大家对51很熟悉,讲起来更容易理解。我曾经看过一些人学uC/OS-II,本来对STM32就不熟悉,又去在STM32上跑一个更不熟悉的 uC/OS-II ,甚至还有人在这种情况下又加上个 uC/GUI。我就只能说呵呵了。 为什么要写这个操作系统(准确的说应该是“调度系统”)? 本人现在还是学生,之前做过一些单片机、DSP以及ARM的项目,但是无一例外地,在做项目中都会遇到一个头疼的问题(这个阶段我总称它为“瓶颈期”或“难产期”),就是多任务并行问题的处理。我们不可能每次遇到多任务并行处理就把uC/OS-II拿过来,的确 uC/OS-II 是一个很好的RTOS,曾经很长一段时间我都迷恋她 ,但是我总觉得只有在非常必要的时候才应该把 uC/OS-II 搬上来,因为 uC/OS-II 真的会使我们的项目开发起来很简单,很有条理,但是每次遇到多任务就用 uC/OS-II 我就觉得有点小题大做了。况且,8位机仍然占据着微控领域的半壁江山,所以,把 uC/OS-II 搬到51中去开发项目,有点像把大象往冰箱里塞,整个系统也会非常迟钝。 我们知道,单片机程序最常见的就是超级循环模式,即while(1)大循环,这种结构一个很大的缺陷就是当我们的MCU需要同时处理多个任务的时候,作为开发者,你的优秀的程序构架就显得相当重要。比如某个项目中要求LED数码管每20ms(50Hz)扫描一次,另一个任务每100ms(10Hz)执行一次,还有一个任务每2s执行一次(比如AD转换监测),…… , 等等。对于这样的要求,其实我们可以通过这个方法来解决:定义很多个全局变量来计时,比如:Timr_A、 Timr_B、 Timr_C,……,等等,单片机上电后第一件事就是启动定时器,在定时中断中挨个使Timr_A、 Timr_B、 Timr_C,…… ,自增,各个任务根据自己的执行周期来判断各自对应的变量( Timr_A、 Timr_B、 Timr_C,…… )有没有达到指定数值,以决定是否执行任务函数。这个原理有点像STM32中的PWM生成。但是这种方法只是一种治标不治本的法子。如果任务非常多,定时器麻烦就大了,因为单片机的中断程序应该尽可能快的结束。而且,如果任务A和任务B定时同时定时到,该执行哪个?如果执行A,那么B就得舍弃,注意,是舍弃,不是等一会再执行B。还有,如果某个任务执行时间出现抖动,整个系统和其它任务都要遭殃了。任务之间的干涉会非常严重。等等。 “面向任务”的思想的一个很重要的原则就是任务之间是低耦合的,原则上是“完全并行”的(不考虑系统全局变量的话)。 在本代码中,力求将多任务并行的情况予以抽象,就其共性提出解决方案,并以代码的最终调试成功作为实现。在此,我不打算带着大家一行一行分析代码。这玩意讲解没用,自己去悟懂了才是王道,我的代码注释得已经很详细了其实。当然,我一贯认为程序是没有百分之百正确的,所以你要是发现这些代码中有值得改进的地方,请你速度指出来,我们一起实现!联系方式见下面。 如果有问题可以加我QQ(986796621),非常喜欢和大家一起讨论问题,使这段代码实用起来,以解决实际问题。 代码的重点是 SCH51.C 和 T0_INIT.C 两个文件,使用之前请务必先看看 CONFIG.H 的配置情况。task.c文件内容你可以自定义来实现。其它的我都有注释的。 海瑞 shr5791@sina.com 2013.10.22 NUAA **************************************************************************************************** ★★★ 很多人还不明白 SCH_Add_Task(Func_name, DELAY_ms, PERIOD_ticks, PREEMPTIVE_EN) 的意思,我来说一下: 1. SCH_Add_Task() 的使用顺序,就决定了任务的优先级,比如: SCH_Add_Task (Task1, 1000, 1, 0); // cooperative SCH_Add_Task (Task2, 400+5000, 5, 0); // cooperative SCH_Add_Task (Task3, 800+10000, 10, 1); // preemptive 可以看出,任务3是抢占式任务,1和2是合作式任务,但是 SCH_Add_Task (Task1, …… );在 SCH_Add_Task (Task2, …… ); 之前,所以任务1的优先级比任务2高,而任务3优先级最高。 2. 有人问 SCH_Add_Task(Func_name, DELAY_ms, PERIOD_ticks, PREEMPTIVE_EN) 中 DELAY_ms, PERIOD_ticks是什么意思。 DELAY_ms :从T0启动定时开始,到第一次执行该任务所要等待的时间(单位是ms); PERIOD_ticks :时标间隔,表示该任务每隔多少个时标间隔执行一次 ( 一个时标间隔TICKS_TIME_MS为多少个ms,由用户在config.中自定义,#define TICKS_TIME_MS 1000 //时标间隔 ( 单位:ms ) ) 所以,以任务3为例,任务3第一次执行是在定时器启动之后第10800 ms,以后每隔10个 TICKS_TIME_MS 执行一次(1个 TICKS_TIME_MS==1000ms ),注意,如果 PERIOD_ticks ==0,则该任务只执行一次,之后就被删除。任务3为抢占式任务。 ****************************************************************************************************
评论
    相关推荐
    • DS.zip
      RTOS的无人机发动机数控系统软件设计RTOS UAV engine design of NC system software
    • SCH51-V1.45.zip
      一个用keilC写的rtos,支持抢占式和非抢占式
    • 60元廉价的资源庞大的ARM学习板
      用一个MP3硬盘播放器改造过来的,其实所谓改造,只是引出jtag口,他上面的是那种间距很细的14pin ...淘宝地址和SVN在这个上传的压缩包上面,资源包还有code sch。datasheet太大了,传不上了,但是Google SVN有完整的
    • ATmega128时间片轮询调度
      ATmega128时间片轮询调度算法,可以模拟实现RTOS多任务功能,很好移植,代码量小
    • Proteus7.12.rar
      Proteus7.12完美破解版.rar电路仿真软件很好用可以仿真单片数字模拟电路
    • VHDL 的实例程序,共44个.rar
      经典VHDL 的实例程序,共44个!要下载的尽快
    • USBtoRS232Driver.rar
      USB转串口驱动程序,可以用在笔记本电脑上,方便的通过串口给单片机下载程序!
    • 模糊控制程序.rar
      模糊PID控制程序的源码,是作业,有讲解,
    • 串口编程源代码.rar
      这是本人最近几年所编写的串行通讯的代码集,可以供大家参考学习。
    • DELTA_PLC.rar
      台达PLC Modbus协议通信dll com控件