[资源共享]

简单直观的写程序

[复制链接]
楼主: holts
手机看帖
扫描二维码
随时随地手机跟帖
Puremr| | 2018-4-28 15:34 | 显示全部楼层
厉害,小小的板子都玩出了这么多花样,值得学习。

使用特权

评论回复
ifree64| | 2018-5-3 17:13 | 显示全部楼层
fox8769 发表于 2018-4-4 08:25
看到这里我就笑了,应该是靠Switch切换任务的,_SS和_EE里面定义了很多东西,10年前就很多前辈讨论这种方 ...

时间过得真快,有10年了吗?
最早是在amobbs上看到的小小调度器,思想源自protothread。不过因为工作不是单片机开发,也没怎么用过这个方法,说这个方法缺陷大于优势,都有哪些缺陷?

使用特权

评论回复
ayb_ice| | 2018-5-4 15:40 | 显示全部楼层
说明你这裸奔还没有玩到家,51上OS就是扯蛋

使用特权

评论回复
holts|  楼主 | 2018-5-5 15:06 | 显示全部楼层
ifree64 发表于 2018-5-3 17:13
时间过得真快,有10年了吗?
最早是在amobbs上看到的小小调度器,思想源自protothread。不过因为工作不是 ...

说说都有哪些缺陷,我也很感兴趣。

使用特权

评论回复
holts|  楼主 | 2018-5-5 15:08 | 显示全部楼层
ayb_ice 发表于 2018-5-4 15:40
说明你这裸奔还没有玩到家,51上OS就是扯蛋

裸奔没玩过,最低限度也是从官方库开始玩,对裸奔没兴趣。

使用特权

评论回复
ayb_ice| | 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可以调用,没有写出来

使用特权

评论回复
abin88| | 2018-5-7 14:10 | 显示全部楼层
在keil里怎么选HC89S003FD4 ?

使用特权

评论回复
holts|  楼主 | 2018-5-8 16:50 | 显示全部楼层
abin88 发表于 2018-5-7 14:10
在keil里怎么选HC89S003FD4 ?

test.png

使用特权

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

继续,太少了看来出精妙之处

使用特权

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

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

使用特权

评论回复
holts|  楼主 | 2018-5-10 08:21 | 显示全部楼层
ayb_ice 发表于 2018-5-9 08:32
整个程序框架是固定的,但有很多功能是可变的,这些都通过一个专门的配置文件来配置,通过配置可以在很大 ...

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

如果一两句话说不清楚,就过于复杂了,当然也许我没有理解你的系统的精妙,最好的办法就是贴上代码,这样方便理解。

使用特权

评论回复
ayb_ice| | 2018-5-10 08:39 | 显示全部楼层
holts 发表于 2018-5-10 08:21
我关注的是概念清淅,结构简单,变量及标志少的操作系统,这样上手容易,易移植,如我介绍的这个操作系统 ...

标志多,但都是只读的,你根本无法修改,标志的变化是系统自动维护的,你説好不好

使用特权

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

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

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


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

定义电灯
sbit Light = P1^0

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

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

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



检查开关A和B有按下就发信号
unsigned char  SwitchK(){
_SS
  while(1){
        if (GPIO_ReadInputPin(GPIOT0,KA&KB))
           SendSem(LightFlag);
   }
_EE
}

收到信号就控制灯取反(原来灯是开的就关,原来灯是关的就开)
unsigned char Light(){
_SS
  while(1){
         WaitSem(LightFlag);
         Light=!Light;
   }
_EE



主程序看起来像这样


void main(void)
{
    System_Init();      
    Time_Init();      

    InitTasks();      
    while(1)
    {
        RunTaskA(SwitchK, Task0_ID);
        RunTaskA(Light, Task1_ID);
    }   
}



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

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

使用特权

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

系统有系统的好处,裸奔有裸奔的好处,
再说同样是裸奔或OS,境界也是有不同的

使用特权

评论回复
paotangsan| | 2018-6-23 08:29 | 显示全部楼层
跑操作系统会不会太浪费

使用特权

评论回复
holts|  楼主 | 2018-6-23 17:20 | 显示全部楼层
paotangsan 发表于 2018-6-23 08:29
跑操作系统会不会太浪费

不浪费,只要很少开销,质量极大提升

使用特权

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

如果对实时性要求不高的话 能在哪个方面有很大提升呢

使用特权

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

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

使用特权

评论回复
paotangsan| | 2018-6-26 08:25 | 显示全部楼层
对于对这些要求不高的系统来说 跑系统是不是就浪费了呢

使用特权

评论回复
holts|  楼主 | 2018-6-27 08:50 | 显示全部楼层
paotangsan 发表于 2018-6-26 08:25
对于对这些要求不高的系统来说 跑系统是不是就浪费了呢

我不赞同你的这种说法,任何系统都应该是高要求的,尽管因为工期、报酬等等各种因素的影响,我们不得不做坚难的取舍,但它不应该成为粗制产品的理由,很多时候我情愿不做,多花点时间培培家人,如果所有的程序员都这样想,这样做,中国制造才有希望。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则