OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 66790|回复: 173

★★★ 自己写的操作系统SCH51(有优先级,可抢占,可用于实际项目)_欢迎各位大神们批评指正 ★★★

  [复制链接]

8

主题

93

帖子

2

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-9-22
在线时间
0 小时
发表于 2013-10-22 11:49:02 | 显示全部楼层 |阅读模式

    代码的最新版本 
SCH51 V1.45 已经发布,见下面7楼回复(以后代码有更新我都会在此说明)  

    建议大家阅读代码的顺序为: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。还有,如果某个任务执行时间出现抖动,整个系统和其它任务都要遭殃了。任务之间的干涉会非常严重。等等。

     “面向任务”的思想的一个很重要的原则就是任务之间是低耦合的,原则上是“完全并行”的(不考虑系统全局变量的话)。
     

    在本代码中,力求将多任务并行的情况予以抽象,就其共性提出解决方案,并以代码的最终调试成功作为实现。在此,我不打算带着大家一行一行分析代码。这玩意讲解没用,自己去悟懂了才是王道,我的代码注释得已经很详细了其实。当然,我一贯认为程序是没有百分之百正确的,所以你要是发现这些代码中有值得改进的地方,请你速度指出来,我们一起实现!联系方式见下面。

       
    如果有问题可以给我发邮件,非常喜欢和大家一起讨论问题,使这段代码实用起来,以解决实际问题。
    代码的重点是 SCH51.CT0_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);
   ERIOD_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为抢占式任务。
                                                                                                                                                               
************************************************************************************************************************************************ 
*/


注意,代码的最新版本放在下面7楼。



SCH51 ★★★★★★★ -抢占式-完.rar

533.63 KB, 下载次数: 4287

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2016-12-7
在线时间
1 小时
发表于 2016-12-7 18:01:17 | 显示全部楼层
大哥。。这也好意思说是自己写?《时间触发嵌入式系统设计模式》2000年就出版啦。。。
回复 支持 3 反对 0

使用道具 举报

8

主题

93

帖子

2

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-9-22
在线时间
0 小时
 楼主| 发表于 2013-11-6 15:17:39 | 显示全部楼层
回复【23楼】sl_arm:
---------------------------------谢谢你们的夸奖,我会继续升级下去!最近打算以这个系统开发一个实际的案例给大家。
回复 支持 1 反对 1

使用道具 举报

3

主题

222

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
355
金钱
355
注册时间
2012-8-13
在线时间
32 小时
发表于 2013-10-22 13:10:04 | 显示全部楼层
牛B,强淫啊!还在学校就这么强,出了学校我就没饭吃了!楼主要手下留情呀!
个人小店,弄了些大人玩具,希望各位老小玩童们喜欢。 http://autocute.taobao.com/
回复 支持 1 反对 0

使用道具 举报

8

主题

93

帖子

2

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-9-22
在线时间
0 小时
 楼主| 发表于 2013-10-22 22:26:01 | 显示全部楼层
新版本代码的修改说明,以及代码都在这:

/*--------------------------------------  V1.25 修改说明  ------------------------------------------------------*-

   1. 定时函数中T0定时时长(ms)宏定义化:

      #define T0_TICK_TIME_MS 5                       //T0定时时长(单位:ms,取值范围:1-50)

      INT8U _TH0_Init_Tick_Time = (65536-(INT16U)(OSC_FREQ*T0_TICK_TIME_MS/(OSC_FREQ_DIV*1000)))/256;   
      INT8U _TL0_Init_Tick_Time = (65536-(INT16U)(OSC_FREQ*T0_TICK_TIME_MS/(OSC_FREQ_DIV*1000)))%256;

   2. 波特率设定时 9600bps 和 57600bps 可选:

      #define Baudrate     9600UL //推荐使用9600UL和57600UL(优先推荐) 

      #if Baudrate == 9600UL
       CON  = 0x00;  TH1   = 0xFd;  TL1   = 0xFd;
      #endif

      #if Baudrate == 57600UL
            PCON  = 0x80;  TH1   = 0xFF;  TL1   = 0xFF;
      #endif
 
   3. 将开T0定时中断函数void SCH_Start_Ticks (void)宏定义化:
      #define    SCH_Start_Ticks()      {ET0  =  1;}
 
   4. 将void SCH_Manual_Timer0_Reload(void)修改为:
      void SCH_Timer0_Reload(void)
   
   5. 可重入函数的声明(待定):
      将 INT8U *INT_2_String(INT32U) 定义并声明为可重入函数:INT8U *INT_2_String(INT32U) reentrant ;
      将 INT8U SCH_Delete_Task(NT8U) 定义并声明为可重入函数:INT8U  SCH_Delete_Task (const INT8U) reentrant;

   6. PDF文件夹中相关文件更新。

-*--------------------------------------------------------------------------------------------------------------*/

V1.25    运行效果  (晶振:11.0592MHz , 波特率: 57600bps,传输速度很快!)  


 

































/*--------------------------------------  V1.30 修改说明  ------------------------------------------------------*-
   1. 构造头文件总包含,方便裁剪:

      #include "includes.h"       //各个.c文件均包含includes.h文件,includes.h包含所有子头文件

   2. 进入临界段和退出临界段的定义:

      #define SCH_ENTER_CRITICAL()          {EA  =  0;}
      #define SCH_EXIT_CRITICAL()           {EA  =  1;}
      //代码中str_MS_Counter = INT_2_String(MS_Counter)一句不能被中断,必须以临界段的方式实现

   3. PDF文件夹中相关文件更新。

-*--------------------------------------------------------------------------------------------------------------*/



/*--------------------------------------  V1.40 修改说明  ------------------------------------------------------*-
   1. 重写task.c文件:

      很多朋友反应task.c中的代码不易理解。现在笔者为了大家能够很好地理解SCH51系统内核本身,重新写了任务函数,
      任务功能尽可能简单。task.c文件中定义了5个任务:

 void  Task_Pulse_50ms   (void); //产生周期为50ms的脉冲
 void  Task_Pulse_100ms  (void); //产生周期为100ms的脉冲
          void  Task_Pulse_200ms  (void); //产生周期为200ms的脉冲
          void  Task_Pulse_400ms  (void); //产生周期为400ms的脉冲
          void  Task_Pulse_800ms  (void); //产生周期为800ms的脉冲

      这样希望大家能将重点放在SCH51内核上。请自行在Keil中仿真实现,效果见picture文件夹中图片。

   2. 串口使能与否选择:

      #define USE_UART       0    //不使用串口(可以降低系统功耗和增强稳定性)  

   3. 更新部分程序和注释。

   4. 更新pdf文件夹中相关文件,更新picture中的仿真效果截图。

-*--------------------------------------------------------------------------------------------------------------*/

Keil中仿真效果如下图所示:



























/*--------------------------------------  V1.45 修改说明  ------------------------------------------------------*-
   1. 修改sch51.h文件中的部分内容为:

      #define INTERRUPT_TIM_0_OF            1
      #define INTERRUPT_EXTERNAL_1          2
      #define INTERRUPT_TIM_1_OF            3
      #define INTERRUPT_UART_RX_TX          4
      #define INTERRUPT_TIM_2_OF            5

      这样更符合ANSI C的书写规范:一般#define定义的常量应用大写字母表示。

   2. 删除sch51.c中的语句:

      extern INT32U MS_Counter;             //在T0_init.c中定义

   3. 移动语句 #define OSC_FREQ_DIV 12 :

      将语句 #define OSC_FREQ_DIV 12 从 config.h 移至 T0_INIT.C 中。
      8051单片机(包括STC12、STC15等1T类型的单片机) 的定时器部分的晶振已经定格为系统晶振12分频,故笔者认为此句不宜
      放在config.h中用于配制,应移至T0_INIT.C中以示意。

   4. 重写函数 SCH_Start_Tasks():此函数一旦运行,将会启动多任务调度,且永不返回主函数,详见SCH51.C文件。

   5. 重写函数 void Delay_ms (INT32U):此函数较以前版本有重大改进,采用时钟摘取算法延时,不影响系统全局变量MS_Counter,
      近乎完美。

   6. 在config.h中增加语句:

      #define USE_UART_RI      0    //不使用串口接收中断
      #define USE_UART_TI      0    //不使用串口发送中断

   7. 将文件T0_init.c和文件T0_init.h重命名为T0_UART_init.c和T0_UART_init.h
      并且重新定义和声明 SCH_Init_T0_UART() 函数。

   8. 在T0_UART_init.c文件中添加函数:

      void SCH_UART_INTERRUPT(void)  interrupt  INTERRUPT_UART_RX_TX

   9. 更新部分程序和注释。

  10. 更新pdf文件夹中相关文件,更新picture中的仿真效果截图。

-*--------------------------------------------------------------------------------------------------------------*/



Pulse_Keil_V1.45 效果图:













SCH51 ★★★★★★★ V1.20.rar

534.16 KB, 下载次数: 1906

SCH51 ★★★★★★★ V1.25.rar

618.16 KB, 下载次数: 1823

SCH51 ★★★★★★★ V1.30.rar

658.54 KB, 下载次数: 1837

SCH51 ★★★★★★★ V1.40.rar

627.01 KB, 下载次数: 1958

SCH51 ★★★★★★★ V1.45.rar

669.09 KB, 下载次数: 4328

回复 支持 1 反对 0

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-10-22 16:09:35 | 显示全部楼层
cool,顶楼主。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2233
金钱
2233
注册时间
2012-4-30
在线时间
7 小时
发表于 2013-10-22 18:32:36 | 显示全部楼层
写单片机我喜欢用状态机机制。
回复 支持 反对

使用道具 举报

5

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2013-7-26
在线时间
0 小时
发表于 2013-10-22 19:59:51 | 显示全部楼层
强人!!!
回复 支持 反对

使用道具 举报

17

主题

465

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2142
金钱
2142
注册时间
2013-1-11
在线时间
504 小时
发表于 2013-10-22 20:54:21 | 显示全部楼层
厉害啊
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-10-22 21:48:07 | 显示全部楼层
 
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

8

主题

93

帖子

2

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-9-22
在线时间
0 小时
 楼主| 发表于 2013-10-22 22:46:30 | 显示全部楼层
回复【2楼】lura2:
---------------------------------没有你说的那么强大,你夸张了~~~,你们工作的才是大神级别的,O(∩_∩)O.
回复 支持 反对

使用道具 举报

8

主题

93

帖子

2

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-9-22
在线时间
0 小时
 楼主| 发表于 2013-10-22 22:47:32 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------哇,站长都来了,倒茶倒茶,列队欢迎!~~
回复 支持 反对

使用道具 举报

8

主题

93

帖子

2

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-9-22
在线时间
0 小时
 楼主| 发表于 2013-10-22 22:48:40 | 显示全部楼层
回复【4楼】lsj9383:
---------------------------------恩,状态机也是一种方法,以后我也尝试尝试。
回复 支持 反对

使用道具 举报

8

主题

93

帖子

2

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-9-22
在线时间
0 小时
 楼主| 发表于 2013-10-22 22:49:09 | 显示全部楼层
回复【5楼】lya126:
---------------------------------木有木有~
回复 支持 反对

使用道具 举报

8

主题

93

帖子

2

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-9-22
在线时间
0 小时
 楼主| 发表于 2013-10-22 22:49:38 | 显示全部楼层
回复【6楼】默默莱:
---------------------------------额,就是自己的一点小心得吧~
回复 支持 反对

使用道具 举报

5

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2013-7-26
在线时间
0 小时
发表于 2013-10-23 08:48:14 | 显示全部楼层
哎我也是学生的!菜鸟一枚!!!!!
好好学习,天天向上
回复 支持 反对

使用道具 举报

8

主题

93

帖子

2

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-9-22
在线时间
0 小时
 楼主| 发表于 2013-10-29 22:58:35 | 显示全部楼层
代码的最新版本《SCH51 V1.40.rar》已经发布,见上面7楼回复
回复 支持 反对

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
发表于 2013-10-30 09:35:19 | 显示全部楼层
我写单片机的程序喜欢用switch,尽量不调用函数。
原子哥是不是又要出黑科技了呀。^_^...
回复 支持 反对

使用道具 举报

8

主题

93

帖子

2

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-9-22
在线时间
0 小时
 楼主| 发表于 2013-10-30 11:05:04 | 显示全部楼层
回复【16楼】fanghuiopenedv:
---------------------------------这样有点像状态机了。其实算法上大家大同小异,就是编程习惯不同吧。
回复 支持 反对

使用道具 举报

1

主题

16

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2013-3-30
在线时间
0 小时
发表于 2013-11-3 19:52:21 | 显示全部楼层
cool
回复 支持 反对

使用道具 举报

8

主题

93

帖子

2

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-9-22
在线时间
0 小时
 楼主| 发表于 2013-11-5 22:27:57 | 显示全部楼层
回复【18楼】wolfyesheng:
---------------------------------谢谢鼓励!
回复 支持 反对

使用道具 举报

32

主题

190

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2013-4-3
在线时间
221 小时
发表于 2013-11-5 23:03:24 | 显示全部楼层
回复【楼主位】shr5791:
---------------------------------
学习学习,以前用51做了一个检测环境的 要检测温度 湿度 光线强度  并用12864显示出来还要显示日历,并且可以用键盘修改时间,并且要接收nrf905 传来的数据,再把传回来的数据和自己检测的数据发到其他模块。这样做出来显示很不流畅...
回复 支持 反对

使用道具 举报

8

主题

93

帖子

2

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-9-22
在线时间
0 小时
 楼主| 发表于 2013-11-6 00:59:16 | 显示全部楼层
回复【20楼】Xy201207:
---------------------------------那我这个系统全是为你量身打造的了,呵呵,但是要注意,第一,任何一个任务的执行时间要控制在一个时标间隔之内,第二,如果一个任务的执行时间确实很长,比如18B20的一次温度检测就至少要500ms,但是我们的CPU并不是500ms都在处理18B20,只是花很长时间去等待它转换完成,所以,应该将长时间的任务分解成多个子任务来满足第一个要求,这样做出来的系统会很稳定,而且任务间的干涉极少,任务并行性很强,而且程序便于维护和扩展。所以,这个系统带给大家的不仅仅是一些任务调度代码,我希望大家能以“面向任务”的思想去开发项目。
回复 支持 反对

使用道具 举报

8

主题

93

帖子

2

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-9-22
在线时间
0 小时
 楼主| 发表于 2013-11-6 01:03:43 | 显示全部楼层
回复【20楼】Xy201207:
---------------------------------另外,不要为了照顾任务的较长的执行时间而去盲目增大系统的时标间隔,这样系统的实时性会大大降低。
回复 支持 反对

使用道具 举报

3

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2013-7-4
在线时间
8 小时
发表于 2013-11-6 14:26:44 | 显示全部楼层
so cool,太厉害了
回复 支持 反对

使用道具 举报

32

主题

190

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2013-4-3
在线时间
221 小时
发表于 2013-11-6 16:02:16 | 显示全部楼层
回复【22楼】shr5791:
---------------------------------
嗯 谢谢  我去仔细看看
回复 支持 反对

使用道具 举报

33

主题

253

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
412
金钱
412
注册时间
2012-8-16
在线时间
0 小时
发表于 2013-11-6 16:24:04 | 显示全部楼层
不错,使用一个平台来控制或者开发51,这是一个很不错的东西!!
楼主很有见地,佩服...
深谋远虑啊...................................................
开源的世界,你可以做主!!
回复 支持 反对

使用道具 举报

32

主题

190

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2013-4-3
在线时间
221 小时
发表于 2013-11-6 23:11:35 | 显示全部楼层
回复【22楼】shr5791:
---------------------------------
很不错,很适合在八位单片机上运行很不错的
回复 支持 反对

使用道具 举报

8

主题

93

帖子

2

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-9-22
在线时间
0 小时
 楼主| 发表于 2013-11-7 07:32:41 | 显示全部楼层
回复【26楼】tsacy:
---------------------------------谢谢你的支持
回复 支持 反对

使用道具 举报

31

主题

161

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2013-4-22
在线时间
7 小时
发表于 2013-11-13 10:50:36 | 显示全部楼层
大虾啊,顶起
http://www.tudou.com/programs/view/h5G_H9Kpk04/?bid=03&pid=1&resourceId=375113802_03_05_01
回复 支持 反对

使用道具 举报

8

主题

93

帖子

2

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-9-22
在线时间
0 小时
 楼主| 发表于 2013-11-13 14:17:02 | 显示全部楼层
回复【29楼】华夏小川:
---------------------------------谢谢支持,大家一起努力,将它强大起来!!!
回复 支持 反对

使用道具 举报

33

主题

253

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
412
金钱
412
注册时间
2012-8-16
在线时间
0 小时
发表于 2013-11-18 13:48:16 | 显示全部楼层
回复【28楼】shr5791:
---------------------------------
说明8位还是很有搞头的嘛!!
开源的世界,你可以做主!!
回复 支持 反对

使用道具 举报

8

主题

93

帖子

2

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-9-22
在线时间
0 小时
 楼主| 发表于 2013-11-18 16:56:37 | 显示全部楼层
回复【31楼】tsacy:
---------------------------------工控的话,8位还是相当有搞头的。大数据或者快速度处理的话才涉及32位的。
回复 支持 反对

使用道具 举报

2

主题

27

帖子

2

精华

中级会员

Rank: 3Rank: 3

积分
371
金钱
371
注册时间
2013-11-19
在线时间
2 小时
发表于 2013-11-20 11:36:23 | 显示全部楼层
强人在中国...
改天试试看LZ的系统...
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2013-11-21
在线时间
0 小时
发表于 2013-11-21 16:40:49 | 显示全部楼层
回复【楼主位】shr5791:
---------------------------------
请问楼主:
        1、在此操作系统中,看门狗程序放在什么位置比较合适?
        2、如何计算CPU的利用率?
        3、在系统运行中,可否调用SCH_Add_Task函数添加新的任务?
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2013-11-21
在线时间
0 小时
发表于 2013-11-21 16:43:57 | 显示全部楼层
回复【楼主位】shr5791:
---------------------------------
如果一个任务没有执行完,被其他任务打断,被打断的任务会压入堆栈,那么堆栈大小设置多大比较合适?设置小了会不会出现数据丢失?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-11-21 16:44:47 | 显示全部楼层
帮顶,楼主很敬业啊.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

8

主题

93

帖子

2

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-9-22
在线时间
0 小时
 楼主| 发表于 2013-11-21 19:30:46 | 显示全部楼层
回复【33楼】tony_sgt:
---------------------------------tony兄过奖了,一小段代码而已 。
回复 支持 反对

使用道具 举报

8

主题

93

帖子

2

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-9-22
在线时间
0 小时
 楼主| 发表于 2013-11-21 19:38:44 | 显示全部楼层
回复【34楼】zhenleichen:
---------------------------------看门狗相对独立,这种异步事件完全取决于你的用户程序,与OS关系不大,比如uC/OS也是如此。堆栈设置小了肯定会出现数据丢失,就以51系统来说,这种情况真的很少,而且我们可以在RAM区开辟仿真栈来实现大堆栈。系统提供一个32位计数器,如果你仔细研读系统提供的延时函数的算法就会发现,利用“时间摘取”法计算系统利用率完全不是问题,但是大多数情况下,计算系统利用率好像没什么用。
回复 支持 反对

使用道具 举报

8

主题

93

帖子

2

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-9-22
在线时间
0 小时
 楼主| 发表于 2013-11-21 19:40:16 | 显示全部楼层
回复【36楼】正点原子:
---------------------------------谢谢原子兄的鼓励哈~~最近在研究USMART调试组件的算法,打算以此来鼓捣出个通用嵌入式调试组件,哈哈~~
回复 支持 反对

使用道具 举报

8

主题

93

帖子

2

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-9-22
在线时间
0 小时
 楼主| 发表于 2013-11-21 19:41:16 | 显示全部楼层
回复【35楼】zhenleichen:
---------------------------------zhenleichen兄也可以自己写写代码,看看能不能实现呢。。本人最近太忙啦,没时间搞这个了。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-11-22 23:20:40 | 显示全部楼层
回复【39楼】shr5791:
---------------------------------
呵呵,usmart已经有3.1版本了,过几天发布.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

8

主题

93

帖子

2

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-9-22
在线时间
0 小时
 楼主| 发表于 2013-11-23 09:13:46 | 显示全部楼层
回复【41楼】正点原子:
--------------------------------- 真的吗,好激动,坐等USMART V3.1发布!!!原子哥哥真棒~~
回复 支持 反对

使用道具 举报

8

主题

93

帖子

2

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-9-22
在线时间
0 小时
 楼主| 发表于 2013-11-23 09:23:35 | 显示全部楼层
回复【41楼】正点原子:
---------------------------------原子兄,USMART V3.1出来之后能不能发一份给我呢,986796621@qq.com,跪求啊!!~~~
还有,我的战舰V2板子USB_232的mini插口经常接触不良,有其他人出现过这种情况吗?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-11-23 11:29:02 | 显示全部楼层
回复【43楼】shr5791:
---------------------------------
待会上传.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
25
金钱
25
注册时间
2013-11-25
在线时间
0 小时
发表于 2013-11-25 10:00:34 | 显示全部楼层
我感觉这个和我看的一本书《时间触发嵌入式系统设计模式》比较像;因为我比较菜,有几点不是太懂 能否加个QQ具体咨询一下 本人QQ327045033
回复 支持 反对

使用道具 举报

8

主题

93

帖子

2

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-9-22
在线时间
0 小时
 楼主| 发表于 2013-11-25 10:08:36 | 显示全部楼层
回复【45楼】林显泽:
---------------------------------这本书以前看过,很经典~
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
25
金钱
25
注册时间
2013-11-25
在线时间
0 小时
发表于 2013-11-25 10:16:47 | 显示全部楼层
回复【46楼】shr5791:
---------------------------------
因为书里面讲的大多是周期性任务,我可以这样问下你麽? 
我们单片机的任务是分了被动和主动型的:被动就是外面事件,比如I/O输入状态  定时器时间溢出产生中断;ADC等
主动型:包括单片机给外面的驱动变化;比如输出高低电平

我们很多任务是因为触发然后才会产生一系列事件:比如按键按下,LED以一定规律变化—然后保存数据等;
这样该怎样来处理?
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
25
金钱
25
注册时间
2013-11-25
在线时间
0 小时
发表于 2013-11-25 10:17:37 | 显示全部楼层
回复【44楼】正点原子:
---------------------------------
版主也在啊;版主好
回复 支持 反对

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
发表于 2013-12-16 15:52:23 | 显示全部楼层
回复【17楼】shr5791:
---------------------------------
小程序可以用switch搞定。大的程序还是要用楼主你的这个调用函数的方法。
原子哥是不是又要出黑科技了呀。^_^...
回复 支持 反对

使用道具 举报

8

主题

93

帖子

2

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-9-22
在线时间
0 小时
 楼主| 发表于 2013-12-17 21:48:04 | 显示全部楼层
回复【49楼】fanghuiopenedv:
---------------------------------建议你先读读源码,好好利用后你会发现还是蛮实用的。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 10:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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