搜索
bottom↓
楼主: yrloy

【原创OS】执行效率与裸机无异的实时内核Z1/OS

  [复制链接]

出0入0汤圆

发表于 2010-10-31 19:42:42 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-1 17:36:07 | 显示全部楼层
GCC版本是什么呢,我的3.4.3编译不过去哦,,,,,,,,,,

出0入0汤圆

发表于 2010-11-1 18:02:06 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-4 09:28:19 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-4 13:44:38 | 显示全部楼层
mark,学习下

出0入0汤圆

发表于 2010-11-4 14:12:28 | 显示全部楼层
首先向LZ学习下,我目前的程序基本上都是必须要有个外部中断(外部传感器必须),然后就是个时基中断。
程序的架构是
主程序就是空闲循环,所有子程序都是条件调用类似LZ的只能或者说之前看见过有人说的状态机的,其中的所有延时都是通过时基中断来标定的。想请问LZ这样的程序有什么问题存在?
最近想用这个我自己这个思路写个SPI 加232通信的软件(不开中断)发现比较纠结!也可能是没处理好时序问题吧。看了LZ的贴受益匪浅。

出0入0汤圆

 楼主| 发表于 2010-11-4 19:17:55 | 显示全部楼层
回复【105楼】mcu2007 努力出国
首先向lz学习下,我目前的程序基本上都是必须要有个外部中断(外部传感器必须),然后就是个时基中断。
程序的架构是
主程序就是空闲循环,所有子程序都是条件调用类似lz的只能或者说之前看见过有人说的状态机的,其中的所有延时都是通过时基中断来标定的。想请问lz这样的程序有什么问题存在?
最近想用这个我自己这个思路写个spi 加232通信的软件(不开中断)发现比较纠结!也可能是没处理好时序问题吧。看了lz的贴受益匪浅。
-----------------------------------------------------------------------
用状态机延时应该没什么问题,我估计您的方式应该是一直用一个中断把全局时钟++,然后延时时用这个时钟做比较,这很好,没问题的。我的方案中,仅仅是把这个中断的时间也省略了,没差多少

SPI,232都不用中断接收,仅仅是标志查询的话,那接收时就要保证一定的标志扫描率,安全收发的速率受主频影响较大,需要注意下。

有点疑问,为什么不把它们放到中断里呢?那样就很从容了。

出0入0汤圆

发表于 2010-11-4 20:48:46 | 显示全部楼层
不用中断的OS见得少啊,学习下

出0入0汤圆

发表于 2010-11-4 22:29:06 | 显示全部楼层
帮顶!现在还不懂,留个记号,以后再研究。

出0入0汤圆

发表于 2010-11-4 23:18:23 | 显示全部楼层
学习下

出0入0汤圆

发表于 2010-11-4 23:26:09 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-4 23:54:57 | 显示全部楼层
赞一个!!
LZ探索精神可佳!

与其说是一OS,不如说是一Framework,而且非常适应8路软PWM的演示。

如以前water-cat所说,仅能用于调度的一段代码,不足矣称之为OS。

LZ没做过系统性的应用(未有说错吧!),单片机μC就不是设计于用于系统性的应用,更倾向于控制;而处理器μP才适应于各种复杂到需要OS的场合。

等看完BIOS、DOS、0.1版LINUX内核源码、ECOS或FreeRTOS、FS/Ethernet等数据型模块的整合应用,就会发现你的想法其实只是特定控制类应用的一个技巧而以。

此回复只在于纠正名称,不在于技术讨论。

出0入0汤圆

发表于 2010-11-5 00:01:12 | 显示全部楼层
其实鄙人现在还不知道堆栈到底怎么个用法。

出0入0汤圆

发表于 2010-11-5 09:06:44 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-5 09:39:28 | 显示全部楼层
mark 又见强人了

出0入0汤圆

 楼主| 发表于 2010-11-7 21:50:04 | 显示全部楼层
回复【111楼】arodnap
赞一个!!
lz探索精神可佳!
与其说是一os,不如说是一framework,而且非常适应8路软pwm的演示。
如以前water-cat所说,仅能用于调度的一段代码,不足矣称之为os。
lz没做过系统性的应用(未有说错吧!),单片机μc就不是设计于用于系统性的应用,更倾向于控制;而处理器μp才适应于各种复杂到需要os的场合。
等看完bios、dos、0.1版linux内核源码、ecos或freertos、fs/ethernet等数据型模块的整合应用,就会发现你的想法其实只是特定控制类应用的一个技巧而以。
此回复只在于纠正名称,不在于技术讨论。

-----------------------------------------------------------------------

谢谢,这确实远不是完整的系统。
我不知道你指的系统性应用是什么?
我是从Windows编程刚刚转到单片机上的,以前一直在PC上写底层驱动,难道那些都不是系统应用?!!!
学AVR不久,请多指教。

出0入0汤圆

发表于 2010-11-7 22:32:54 | 显示全部楼层
很好的一个帖子 看了受益很多!

出0入0汤圆

发表于 2010-11-8 14:51:41 | 显示全部楼层
支持~~崇拜游走在两个领域之间的人物~~~嘿嘿

出0入0汤圆

发表于 2010-11-8 15:44:31 | 显示全部楼层
看看先

出0入0汤圆

发表于 2010-11-8 21:24:26 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-9 13:01:21 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-9 20:40:15 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-9 21:31:09 | 显示全部楼层
LZ真的非常有想法,只有膜拜了

出0入0汤圆

发表于 2010-11-9 22:34:51 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-9 23:57:55 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-26 09:19:14 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-26 10:03:12 | 显示全部楼层
mark,谢谢分享!!

出0入0汤圆

发表于 2010-11-26 10:34:59 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-26 11:01:09 | 显示全部楼层
好文章,支持下。

出0入0汤圆

发表于 2010-11-26 13:38:27 | 显示全部楼层
支持楼主,mark

出0入0汤圆

发表于 2010-11-26 14:06:05 | 显示全部楼层
我作的东东都不大,现在还是用裸机。

出0入0汤圆

发表于 2010-11-28 08:35:24 | 显示全部楼层
楼主,有没有各各功能的例程?
比如,ADC例程。
      模拟比较器例程。
      串口通信
等等,这样,我们菜鸟就可以直接在你的程度上改改就用起来了。
还有,有的功能只是在外部条件一定的情况下才工作,这样如何在一个进程中创建/销毁另一个进程。
我没有细细看楼主系统程序,只是用楼主的程序运行了数码管,用起来很简单。
其实我作为一个菜鸟,只是希望能用一个这们的系统,出现在个项目,只要在你的系统上把我想要的片子上功能一初始化,其它的修改一下,系统就可以跑了。不管内核是如何工作的,我只想用windows不想生产windows。

出0入0汤圆

发表于 2010-11-28 08:58:30 | 显示全部楼层
还有,如何在一个进程内改另一个进程的时间,比如A进程中通过检测外部事件,修改B进程中的PWM频率
如果问题太简单,高手不要笑!

出0入0汤圆

发表于 2010-12-8 11:32:30 | 显示全部楼层
现在还是用裸机。

出0入0汤圆

发表于 2010-12-10 17:32:16 | 显示全部楼层
学习中。谢谢楼主

出0入0汤圆

发表于 2010-12-10 18:08:14 | 显示全部楼层
mark回去慢慢看!!

出0入0汤圆

发表于 2010-12-10 20:50:29 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-10 23:30:44 | 显示全部楼层
楼主的文章写得很,下了楼主的OS好好研读~

出0入0汤圆

发表于 2010-12-11 00:00:21 | 显示全部楼层
回复【楼主位】yrloy  断雪
-----------------------------------------------------------------------

看了楼主的代码,思想就是task主动出让CPU,在出让CPU时找出下一个优先级最高的task去运行,非抢占、没有同步机制。其实,这完全不是OS的概念,完全用轮训的方式也可以实现,所有的task可以共用一个stack,完全没有必要有多个tasks。

出0入0汤圆

发表于 2010-12-11 11:45:22 | 显示全部楼层
mark  操作系统

出0入0汤圆

 楼主| 发表于 2010-12-11 12:34:24 | 显示全部楼层
回复【138楼】notfox
回复【楼主位】yrloy  断雪
-----------------------------------------------------------------------
看了楼主的代码,思想就是task主动出让cpu,在出让cpu时找出下一个优先级最高的task去运行,非抢占、没有同步机制。其实,这完全不是os的概念,完全用轮训的方式也可以实现,所有的task可以共用一个stack,完全没有必要有多个tasks。
-----------------------------------------------------------------------

轮询的方式、不用STACK,这个我很慎重的思考过。类似的东西里,做的最出名、也是最好的就是PT。
但是在上面写程序,真的是对神经的一种挑战,没有STACK,只能在函数里用静态变量,但是反复重入怎么办?也可以,再重入怎么办?也可以,但是会层层降低程序的可维护性,开发周期无形变长。
我想移植一个自己已经写好并以正确运行的LCD程序到PT框架。。。结果放弃了。。。

而STACK方式的好处是,任何一个线程都可以完全独立,每一个线程就是一个独立的main函数,以前写好的所有程序,基本无需修改,直接使用。而且网上资源中的裸机代码,无条件引用。

出0入0汤圆

发表于 2010-12-13 15:24:45 | 显示全部楼层
Z1OS,不错!好好学习一下。

出0入0汤圆

发表于 2010-12-15 14:51:38 | 显示全部楼层
学习中。
有没有移值到IAR中成功的。能否上传一下

出0入0汤圆

发表于 2010-12-15 16:36:05 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-16 14:47:47 | 显示全部楼层
弱弱的问一下楼主 yrloy 断雪

能否将OS移值到IAR中,我在移值到IAR中好像建立任务时每次都失败,晚上我在将代码发上来

出0入0汤圆

发表于 2010-12-16 15:04:01 | 显示全部楼层
mark

出0入0汤圆

 楼主| 发表于 2010-12-17 14:56:34 | 显示全部楼层
回复【144楼】liaogang1314
弱弱的问一下楼主 yrloy 断雪
能否将os移值到iar中,我在移值到iar中好像建立任务时每次都失败,晚上我在将代码发上来
-----------------------------------------------------------------------

IAR是收费的买不起,没用过盗版。
不过应该可以移植吧,不同的地方,我估计也就是在头文件和内联汇编以及中断的方式上,剩下应该可以。

出0入0汤圆

发表于 2010-12-18 09:30:56 | 显示全部楼层
不知为什么,移值过去后编译也成功。但是仿真老是不能建立任务。在建立的任务返回老是0,

能不能辛苦下哪位会IAR的大侠们帮忙移值下,谢谢!


回复【145楼】wayhe
-----------------------------------------------------------------------
楼主的OS已经很好我也在学习,我在分析OS会在一个执行任务时间超过另一个任务的delay时间时,这时delay任务就会不只一个节拍的延迟了吧,就一个简单的来说,如果其中有一个任务在死循环的话,其他就不会执行了。这样理解对不对。
能不能提个建议,
将定时中断打开,把计数人数量设大一点。当中断时在执行调渡。

出0入0汤圆

发表于 2010-12-18 10:26:42 | 显示全部楼层
先收藏了,慢慢看。

出0入0汤圆

发表于 2010-12-18 11:13:39 | 显示全部楼层
打击一下楼主,不用定时器的系统不是没有,坛子里有一个51和为原创的简易OS,ROM几十个字节,好像已经移植到包括AVR,STM8等芯片了吧;
在这里赞一个,虽然我不喜欢用系统;但是不妨碍研究学习;

出0入0汤圆

 楼主| 发表于 2010-12-18 13:35:18 | 显示全部楼层
回复【147楼】sunrun

不知为什么,移值过去后编译也成功。但是仿真老是不能建立任务。在建立的任务返回老是0,
能不能辛苦下哪位会iar的大侠们帮忙移值下,谢谢!
回复【145楼】wayhe  
-----------------------------------------------------------------------
楼主的os已经很好我也在学习,我在分析os会在一个执行任务时间超过另一个任务的delay时间时,这时delay任务就会不只一个节拍的延迟了吧,就一个简单的来说,如果其中有一个任务在死循环的话,其他就不会执行了。这样理解对不对。
能不能提个建议,
将定时中断打开,把计数人数量设大一点。当中断时在执行调渡。

-----------------------------------------------------------------------

这是协作式,所以必须适当的在任务的每个阶段延时。放在中断中的调度是占先式内核,很好,不过我为什么没用,在前面已经说的很清楚啦~~谢谢支持~~

出0入0汤圆

发表于 2010-12-19 00:26:09 | 显示全部楼层
马克

出0入0汤圆

发表于 2010-12-19 11:54:03 | 显示全部楼层
好帖马可学习中

出0入0汤圆

发表于 2010-12-20 13:05:35 | 显示全部楼层
学习。

出0入0汤圆

发表于 2010-12-20 13:11:38 | 显示全部楼层
这个得顶!

出0入0汤圆

发表于 2010-12-28 23:33:08 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-28 23:58:44 | 显示全部楼层
来抢个个人开发授权

出0入0汤圆

发表于 2010-12-29 11:55:27 | 显示全部楼层
非常精彩,努力学习中。

出0入9汤圆

发表于 2010-12-29 13:43:18 | 显示全部楼层
先留个名

出0入0汤圆

发表于 2010-12-29 15:10:20 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-29 15:14:53 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-29 15:22:48 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-29 16:23:44 | 显示全部楼层
严格来说这不算是实时操作系统,至少不是硬实时。不过有些时候还是挺管用的,以前在AVR上写过类似的多任务调度机制。

出0入0汤圆

发表于 2010-12-30 14:26:11 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-30 15:29:49 | 显示全部楼层
先回贴,等下再细看

出0入0汤圆

发表于 2010-12-30 17:17:57 | 显示全部楼层
看来看去,这个不算什么新鲜事,一开始就怀疑,后面终于看到了"控制权 总是 任务主动释放的"这句话.
这样的做法,其实很早就有了,并不是前无古人的.依稀记得在陈明计的SmallRTOS那本书上就提到过.
这种做法不能算实时操作系统,而且任务程序的写法也会比较麻烦,你必须考虑别的任务是不是该执行了,以此判断自己是不是要释放一下控制权.
不过有点也很明显,楼主说得很清楚了

出0入0汤圆

发表于 2010-12-30 19:47:19 | 显示全部楼层
这个主意不错,而且楼主的表达很清晰,学习学习!

出0入0汤圆

 楼主| 发表于 2010-12-30 20:41:58 | 显示全部楼层
回复【165楼】xiaobenyi
看来看去,这个不算什么新鲜事,一开始就怀疑,后面终于看到了"控制权 总是 任务主动释放的"这句话.
这样的做法,其实很早就有了,并不是前无古人的.依稀记得在陈明计的smallrtos那本书上就提到过.
这种做法不能算实时操作系统,而且任务程序的写法也会比较麻烦,你必须考虑别的任务是不是该执行了,以此判断自己是不是要释放一下控制权.
不过有点也很明显,楼主说得很清楚了
-----------------------------------------------------------------------

此调度器的特点是不用中断做时钟基准,减少了更新时钟的时间损耗,来提高效率。你看到的,完全不是重点。。。

出0入4汤圆

发表于 2010-12-30 20:55:58 | 显示全部楼层
先mark一下,一直用裸机跑,试试上os

出0入0汤圆

发表于 2010-12-30 23:36:29 | 显示全部楼层
专门抽时间来学习一下LZ的Z1/OS。

出0入0汤圆

发表于 2011-1-4 18:18:10 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-8 20:02:27 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-1-8 20:40:48 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-8 21:57:39 | 显示全部楼层
看一下

出0入0汤圆

发表于 2011-1-8 22:29:31 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-1-9 00:06:22 | 显示全部楼层
不用定时器中断倒是一个新思路,你的目的是要省去定时器中断所耗的时间,但做法仍有问题(一些建议,希望别见怪)
1、首先这个定时器并没省下来,即这个定时器仍不能再做为正常定时记数器用,它只能提供节拍的基准...想再增加小于 OS_TICKS_COEFFICIENT 的定时都困难,
2、其实第一个问题无关紧要,更要命的是,你想通过省去中断提高程序效率的目的没达到,甚至是事得其反:程序中你查询TCNT0的频率要远大于定时器节拍进中断的频率,即你每次任务切换都要浪费时间处理节拍问题,其实效率会更低的。
3、8位MCU OS的优先级的查询处理建议不要放在任务切换函数里,你倒是没放同一函数,但是一个平级的另一函数,这样效果会更差。每个TASKSWITCH都游历一次这段代码,整体效率会大打折扣的,特别是低速8位MCU,真正要高效时每个NOP都很重要,况且你这个优先级处理函数做得也臃肿,竟用了60行代码...
4、任务切换函数OSCtxSw做得很好,出栈入栈都用宏实现,这符合OS任务切换的套路。

只看了一下任务切换部分,其它没看,任务创建,删除等对时间要求并不高,只要保证稳定性即可。
希望楼主继续完善Z1OS...

出0入0汤圆

发表于 2011-1-9 00:36:22 | 显示全部楼层
MARK.

出0入0汤圆

发表于 2011-1-9 00:38:42 | 显示全部楼层
cool

出0入0汤圆

发表于 2011-2-10 15:40:52 | 显示全部楼层
回复【楼主位】yrloy 断雪
-----------------------------------------------------------------------

呵呵,学习,学习!

出0入0汤圆

发表于 2011-2-10 15:50:54 | 显示全部楼层
记号

出0入0汤圆

发表于 2011-2-11 08:13:13 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-2-11 08:48:24 | 显示全部楼层
学下

出0入0汤圆

发表于 2011-2-11 09:46:11 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-2-11 11:22:31 | 显示全部楼层
来学习一下!

出0入0汤圆

发表于 2011-2-11 12:33:28 | 显示全部楼层
留个记号,慢慢学

出0入0汤圆

发表于 2011-2-11 13:17:45 | 显示全部楼层
回复【30楼】yrloy 断雪
-----------------------------------------------------------------------
我也一直在想 实时操作系统的问题,总感觉一般的系统太复杂,好多不实用,效率又不高




不过抢占式要想用,问题很多,你怎么知道当前任务里就没有去改变其它任务的优先级?或者是恢复了一个比你预定的优先级高的任务?而且万一最高优先级任务要等待很久,就为此让其任务不运行陪着么?


LZ的这个系统 应该说是有特点,在某些方面实用,但是不能说先进性
不是以前的人不知道这样子写系统,是因为这样子有个很大的问题,实时性不高。

RE:而且万一最高优先级任务要等待很久,就为此让其任务不运行陪着么
是要等,只要有高优先级,低的肯定不执行。这才能保证实时性。。。

出0入0汤圆

发表于 2011-2-11 13:22:35 | 显示全部楼层
回复【45楼】yrloy 断雪
-----------------------------------------------------------------------

我知道你不用中断,但是你要实现好的实时性 就要不断的查询,所以你的这种方法,不一定随时都好

出0入0汤圆

发表于 2011-2-11 13:24:53 | 显示全部楼层
@yrloy 断雪, 文件包里怎么连个README都没有?

出0入0汤圆

发表于 2011-2-11 14:02:24 | 显示全部楼层
学习下~~~

出0入0汤圆

发表于 2011-2-11 15:44:20 | 显示全部楼层
好东西呀,先记号!Thanks
头像被屏蔽

出0入0汤圆

发表于 2011-2-12 11:47:31 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2011-2-12 13:44:41 | 显示全部楼层
做个记号。

出0入0汤圆

发表于 2011-2-15 08:51:25 | 显示全部楼层
最近几天一直在思考lz的这两篇文章,感觉很不错。再深入学习后再像lz讨教

出0入0汤圆

发表于 2011-4-27 14:13:21 | 显示全部楼层
MARK。

出0入0汤圆

发表于 2011-5-4 19:28:10 | 显示全部楼层
mark 好文学习!

出0入0汤圆

发表于 2011-5-8 21:15:32 | 显示全部楼层
mark 好文学习!

出0入0汤圆

发表于 2011-5-9 00:02:08 | 显示全部楼层
学习下,感谢分享。

出0入0汤圆

发表于 2011-5-9 00:44:58 | 显示全部楼层
决心移植到51上!!!

出0入0汤圆

发表于 2011-5-9 08:51:40 | 显示全部楼层
mark一下

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-10-3 09:17

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

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