搜索
bottom↓
回复: 10

[MsgOS]hello world!

[复制链接]

出0入0汤圆

发表于 2016-6-16 17:59:31 | 显示全部楼层 |阅读模式
[MsgOS]说好的源码来了
http://www.amobbs.com/thread-5653087-1-1.html
(出处: amoBBS 阿莫电子论坛)

[MsgOS]让系统跑起来
http://www.amobbs.com/thread-5653207-1-1.html
(出处: amoBBS 阿莫电子论坛)

[MsgOS]shell初体验
http://www.amobbs.com/thread-5653206-1-1.html
(出处: amoBBS 阿莫电子论坛)

[MsgOS]建议征集
http://www.amobbs.com/thread-5653238-1-1.html
(出处: amoBBS 阿莫电子论坛)




源码也有了,程序也能跑起来了,接下来就该大家熟悉的"hello world!"了
修改app文件夹下的app.c如下所示,编译运行,在shell界面会每秒打印输出一次"hello world!"
  1. void   hello_world(uint32 data,void *ptr)
  2. {
  3.     static uint32 n=0;
  4.     printf("hello world!n=%d\r\n",n++);   
  5. }

  6. void   App_Init(uint32 data,void *ptr)
  7. {
  8.         stdio_mount("rtt");
  9.     msg_send(hello_world,0,NULL,1000,0,MSG_OPT_REPEAT);
  10. }
  11. MSG_REG(App_Init,0,NULL,0,0,0);
复制代码


说明:
1.App_Init是应用代码的入口函数
2.stdio_mount("rtt");//将rtt设备挂载到系统标准输入输出上,这样就可以使用标准库<stdio.h>中的printf(),scanf()等标准输入输出流函数了。同时系统shell的输入输出也是使用标准库输入输出的。
3.msg_send(hello_world,0,NULL,1000,0,MSG_OPT_REPEAT);发送消息给系统。让hello_world函数每1000毫秒执行一次。
其中msg_send函数的原型为msg_st  *msg_send(msg_f  msgf,uint32 data,void *ptr,uint32  time,uint08  priority,uint16  opt);
输入参数:
msgf:类型是函数指针msg_f ,是消息执行时的回调函数,确定了这个消息要“干什么”
           函数指针msg_f的定义是typedef    void   (*msg_f)(uint32 data,void *ptr);有两个输入参数
data:类型是uint32 ,对应于msgf的第一个参数
ptr:  类型是void *,对应于msgf的第二个参数。data和ptr一同决定了msgf被回调执行时的输入参数。
time:类型是uint32,延时或周期时间,单位毫秒。MsgOS系统心跳固定为1毫秒,而其他家系统一般是可变的。
priority:类型是uint08,执行线程优先级,priority决定了消息在哪个线程中执行。
              MsgOS最多可有33个线程,最少两个线程,每个线程有唯一的优先级,或者说每个优先级里只能有一个线程。priority数值越大优先级越高,高              优先级线程可抢断低优先级线程执行。系统启动后会默认启动两个线程分别是:
             1.idle线程,优先级最低(-1)总是就绪状态,用于统计cpu空闲率。
             2.base线程,优先级为0,是消息执行的最低优先级
opt:类型是uint16 ,决定消息的一些特定属性,可选项有MSG_OPT_NONE,MSG_OPT_IRQ,MSG_OPT_PERIODIC,MSG_OPT_REPEAT
输出参数:类型是msg_st  *,即发送消息使用的消息体指针,如果为NULL说明消息发送失败。


结语:msg_send函数是 MsgOS最重要的函数,msg_send函数是 MsgOS最重要的函数,msg_send函数是 MsgOS最重要的函数(重要的事情说三遍)

本帖子中包含更多资源

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

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入76汤圆

发表于 2016-6-16 20:23:17 | 显示全部楼层
不错, 先弄一个初步的介绍性的文档出来, 才能让更多的电工玩起来

出0入0汤圆

 楼主| 发表于 2016-6-16 20:28:54 | 显示全部楼层
foxpro2005 发表于 2016-6-16 20:23
不错, 先弄一个初步的介绍性的文档出来, 才能让更多的电工玩起来

谢谢支持。可以多发些体验帖,说说自己的心得看法,玩的人多了才有意思

出0入0汤圆

发表于 2016-6-17 12:56:28 | 显示全部楼层
不错!感觉还可以的呢,可以用指令暂停或恢复某个线程吗?

出0入0汤圆

 楼主| 发表于 2016-6-17 13:07:23 | 显示全部楼层
rundream 发表于 2016-6-17 12:56
不错!感觉还可以的呢,可以用指令暂停或恢复某个线程吗?

当然可以啊,这是最基本的线程操作。
不过既然叫MsgOS,即message operating system,主要还是突出其消息机制的,消息机制用的的好是可以避免创建多个线程的。

出0入0汤圆

发表于 2016-6-17 13:54:45 | 显示全部楼层
很好!  
我看了你写的特点:
1.消息触发:以消息触发作为系统核心的运行机制。一切不能或不便于直接调用的功能函数都可转化为通过消息间接调用。

请问能否进一步阐述消息出发的特点。  是不是可以理解为线程任务的动态加载?

出0入0汤圆

 楼主| 发表于 2016-6-17 14:36:41 | 显示全部楼层
程序里的各种代码块都是为某一功能服务的(即触发动作),而执行某一过程或动作一定也是要有个起因的(即触发条件),触发条件可以来自系统复位,中断响应,查询标志成立,子模块调用等。大部分情况下触发条件成立时直接调用触发动作即可,这其实就是函数调用过程。但是实际项目中很多时候没这么简单,如外部触发中断告知某无线模块收到了数据报文请求处理,这时如果把整个报文的接收和解析过程全不在中断中执行,就会影响下一次报文及时接收和系统其他部分的及时处理。这时我们可以采用消息触发方式在接收完数据后打包成消息发送给线程处理而能及早退出中断,在线程处理的过程中就不在影响下一次接收数据的及时处理了。消息触发可以很好的把触发条件和触发动作解耦合,使得系统得以优化。MsgOS里线程主要是为消息处理提供工作空间的,即独立的栈空间,便于消息处理能被中断或更高优先级的线程抢断。

出0入0汤圆

发表于 2016-6-21 09:15:17 | 显示全部楼层
又有发明了一个新的os?

出0入0汤圆

发表于 2016-6-21 09:15:55 | 显示全部楼层
又有发明了一个新的os?

出0入0汤圆

发表于 2016-6-28 22:46:02 | 显示全部楼层
资料还是太少了,自己研究得半天

出0入0汤圆

 楼主| 发表于 2016-6-28 22:55:22 | 显示全部楼层
suny1022 发表于 2016-6-28 22:46
资料还是太少了,自己研究得半天

资料少是实情,但大家要是就等着我一个人把文档写完,把例程写完,把可能有的漏洞补上后才觉得学习使用MsgOS很有价值的话,那就真得等一段时间了。其实如果真感兴趣现在完全就可以参与进来,提问也好,建议也好,发帖推荐也好都是一种参与和支持。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-19 23:37

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

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