[应用方案] 简单直观的写程序

[复制链接]
楼主: holts
| 2018-4-28 15:34 | 显示全部楼层
厉害,小小的板子都玩出了这么多花样,值得学习。
| 2018-5-3 17:13 | 显示全部楼层
fox8769 发表于 2018-4-4 08:25
看到这里我就笑了,应该是靠Switch切换任务的,_SS和_EE里面定义了很多东西,10年前就很多前辈讨论这种方 ...

时间过得真快,有10年了吗?
最早是在amobbs上看到的小小调度器,思想源自protothread。不过因为工作不是单片机开发,也没怎么用过这个方法,说这个方法缺陷大于优势,都有哪些缺陷?
| 2018-5-4 15:40 | 显示全部楼层
说明你这裸奔还没有玩到家,51上OS就是扯蛋
 楼主 | 2018-5-5 15:06 | 显示全部楼层
ifree64 发表于 2018-5-3 17:13
时间过得真快,有10年了吗?
最早是在amobbs上看到的小小调度器,思想源自protothread。不过因为工作不是 ...

说说都有哪些缺陷,我也很感兴趣。
 楼主 | 2018-5-5 15:08 | 显示全部楼层
ayb_ice 发表于 2018-5-4 15:40
说明你这裸奔还没有玩到家,51上OS就是扯蛋

裸奔没玩过,最低限度也是从官方库开始玩,对裸奔没兴趣。
| 2018-5-7 08:30 | 显示全部楼层
holts 发表于 2018-5-5 15:08
裸奔没玩过,最低限度也是从官方库开始玩,对裸奔没兴趣。

有看起来像OS的裸奔玩法,框架基本固定,你只需要修改回调函数的内容就可以了
 楼主 | 2018-5-7 12:56 | 显示全部楼层
ayb_ice 发表于 2018-5-7 08:30
有看起来像OS的裸奔玩法,框架基本固定,你只需要修改回调函数的内容就可以了 ...

能不能贴个例子上来,最好配点简短的说明,学习借荐下。
| 2018-5-7 14:10 | 显示全部楼层
holts 发表于 2018-5-7 12:56
能不能贴个例子上来,最好配点简短的说明,学习借荐下。

这东西不是几句代码能搞定的
给你看下部分代码的统计吧
//______________________________________________________________
// 接口
//______________________________________________________________
//________________________
// SUI.c
// SUI_MutexFuncSwicth
// SK_Gen1
// SK_Gen2
// SK_Gen3
// SK_Gen4
// SK_Other
// SUI_SkExt
// SUI_PowerOff
// SUI_MutexFuncHandle
// SUI_CorrectNewTaskIndex
// SUI_ReportError
// SUI_MutexFuncInit
// SUI_MutexFuncExe
// SUI_MutexFuncExit

// KERNAL.c
// SS_Kernak
// SK_Sync
// SS_CalcIdleRatio
// SS_TaskStructInit
// SK_MutexFuncManage

// FLAG.c
// SS_SysFlagStructInit
// SUI_ResetPhase
// SI_TickCallBack
// SS_Sync
// SK_MainFlagHandle
// SS_MainComFlagHandle
// SS_ThisComFlagHandle
// SS_ThisFlagHandle
// SS_ClearSyncTotalError

这些代码位置是固定的,不能改变,但回调函数可以修改内容,

另外还有很多API可以调用,没有写出来
| 2018-5-7 14:10 | 显示全部楼层
在keil里怎么选HC89S003FD4 ?
 楼主 | 2018-5-8 16:50 | 显示全部楼层
abin88 发表于 2018-5-7 14:10
在keil里怎么选HC89S003FD4 ?


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主 | 2018-5-8 21:33 | 显示全部楼层
ayb_ice 发表于 2018-5-7 14:10
这东西不是几句代码能搞定的
给你看下部分代码的统计吧
//____________________________________________ ...

继续,太少了看来出精妙之处
| 2018-5-9 08:32 | 显示全部楼层
holts 发表于 2018-5-8 21:33
继续,太少了看来出精妙之处

整个程序框架是固定的,但有很多功能是可变的,这些都通过一个专门的配置文件来配置,通过配置可以在很大程序改变架构的功能,整个程序有个算法,可以维护很多时间标志,但其实中占用很少的RAM空间和时间,程序就是个while(1)循环,任务根据标志去运行(当然也可以不根据标志,这些由程序自由决定),每个循环的时间是固定的(理论是10ms),实际可以少于或多于这个值,但总体平均值是10ms,框架会监测l累计误差,大于一定值可以报警或停机,这些功能都是可以配置的。。。还有很多功能,不是一两句话能说清楚的
 楼主 | 2018-5-10 08:21 | 显示全部楼层
ayb_ice 发表于 2018-5-9 08:32
整个程序框架是固定的,但有很多功能是可变的,这些都通过一个专门的配置文件来配置,通过配置可以在很大 ...

我关注的是概念清淅,结构简单,变量及标志少的操作系统,这样上手容易,易移植,如我介绍的这个操作系统就只涉及了时间片,任务,信号几个简单标准的概念, 你都不需要看代码,就可以干活了。

如果一两句话说不清楚,就过于复杂了,当然也许我没有理解你的系统的精妙,最好的办法就是贴上代码,这样方便理解。
| 2018-5-10 08:39 | 显示全部楼层
holts 发表于 2018-5-10 08:21
我关注的是概念清淅,结构简单,变量及标志少的操作系统,这样上手容易,易移植,如我介绍的这个操作系统 ...

标志多,但都是只读的,你根本无法修改,标志的变化是系统自动维护的,你説好不好
 楼主 | 2018-5-12 12:58 | 显示全部楼层
本帖最后由 holts 于 2018-5-12 14:00 编辑
ayb_ice 发表于 2018-5-10 08:39
标志多,但都是只读的,你根本无法修改,标志的变化是系统自动维护的,你説好不好 ...

标志多,还不能改 ? 每个单片机的场景不同, 标志要用到才定义, 越少越好,多了程序的可读性就差了。

举个例子来说,假设一个客厅有两个门,每个门旁都有个开关,控制同一个灯, 用户进门时按下开关,灯亮, 当用户从另一个门走出去时按下开关,灯灭, 如果用单片机来处理,我会定义几个用得到的标志。


  1. 定义开关A和B
  2. sbit KA = P0^0
  3. sbit KB = P0^1

  4. 定义电灯
  5. sbit Light = P1^0

  6. 定义一个电灯互斥锁标志
  7. SEM  LightMutex  ;

复制代码
简简单单,永远都不要定义用不到的多余标志。

再定义两个涵数来处理它们



  1. 检查开关A和B有按下就发信号
  2. unsigned char  SwitchK(){
  3. _SS
  4.   while(1){
  5.         if (GPIO_ReadInputPin(GPIOT0,KA&KB))
  6.            SendSem(LightFlag);
  7.    }
  8. _EE
  9. }

  10. 收到信号就控制灯取反(原来灯是开的就关,原来灯是关的就开)
  11. unsigned char Light(){
  12. _SS
  13.   while(1){
  14.          WaitSem(LightFlag);
  15.          Light=!Light;
  16.    }
  17. _EE


复制代码

主程序看起来像这样


  1. void main(void)
  2. {
  3.     System_Init();      
  4.     Time_Init();      

  5.     InitTasks();      
  6.     while(1)
  7.     {
  8.         RunTaskA(SwitchK, Task0_ID);
  9.         RunTaskA(Light, Task1_ID);
  10.     }   
  11. }

复制代码


这就是引入操作系统的好处,我们可以优雅的写程序, 程序的可读性,重用性,可移植性和质量都有大弧度的提升,这些对于软件工程项目的标准化生产和质量控制都是非常非常重要的,这也是我一在强调用操作系统的出发点。

很多人都喜欢裸奔,为了一点点的性能或空间的提升,用尽各种奇云技巧,实际上得不尝失,必境大部份程序员还都是凡人, 再说单打独斗的年代早就过时了,现在讲究的都是团队作战。

| 2018-5-14 09:04 | 显示全部楼层
holts 发表于 2018-5-12 12:58
标志多,还不能改 ? 每个单片机的场景不同, 标志要用到才定义, 越少越好,多了程序的可读性就差了 ...

系统有系统的好处,裸奔有裸奔的好处,
再说同样是裸奔或OS,境界也是有不同的
| 2018-6-23 08:29 | 显示全部楼层
跑操作系统会不会太浪费
 楼主 | 2018-6-23 17:20 | 显示全部楼层
paotangsan 发表于 2018-6-23 08:29
跑操作系统会不会太浪费

不浪费,只要很少开销,质量极大提升
| 2018-6-25 09:13 | 显示全部楼层
holts 发表于 2018-6-23 17:20
不浪费,只要很少开销,质量极大提升

如果对实时性要求不高的话 能在哪个方面有很大提升呢
 楼主 | 2018-6-25 16:43 | 显示全部楼层
paotangsan 发表于 2018-6-25 09:13
如果对实时性要求不高的话 能在哪个方面有很大提升呢

这就是引入操作系统的好处,我们可以优雅的写程序, 程序的可读性,重用性,可移植性和质量都有大弧度的提升,这些对于软件工程项目的标准化生产和质量控制都是非常非常重要的,这也是我一在强调用操作系统的出发点。

扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

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