特别向傻孩子请教:我刚学完RTOS,如何将前后台代码移植到UCOS-II呢?【恢复】
1、在前后台中,通讯协议为MODBUS,MODBUS解析子程序中,当判断是“预置单个寄存器”时,做如下动作:
(1)、将预置值保存到RAM
(2)、执行某个子程序(例如需要修改波特率时,调用串口初始化程序)
(3)、触发EEPROM就绪中断,将预置值写到EEPROM中。
用UCOS-II如何实现。
2、系统上电后,要求两个模块之间必须必须建立握手信号,
即模块A通过串口向模块B发送“1234”,模块B收到后,给模块A返回应答。
当模块A收到后,其余的任务才能执行,否则系统一直处于建立握手信号过程。 喔,等待信号量,信号量用无限超时。
谢谢。
前后台移植到RTOS,需要洗洗_脑子了。 那就写一个任务,一直等待主机主机的消息,Pending就可以了
得到数据以后,就初始化串口,改变波特率,然后写EEPROM就可以了阿……
注意在初始化串口的时候要设置临界区……防止其它任务操作串口…… 谢谢傻孩子。
是这样的:
在前后台系统中,一个MODBUS总线上,主站给某个从站发送“预置单个寄存器”指令,
(例如:主站准备修改当前从站的波特率)。
从站的MODBUS解析子程序中,判断收到指令后,“从站”做如下动作:
(1)、调用串口初始化程序,重新改变从站的波特率
(2)、将波特率数值写到从站的EEPROM中
(下次开机时,直接从EEPROM中读取波特率数值,用来初始化串口)。
用UCOS-II如何实现。 不明白上面的操作让你哪里不知道如何写?
因为看不懂你的问题,所以不知道怎么回答你…… 喔,知道了,其它任务在等待邮箱是否收到,收到后才执行后面的代码,否则一直等待。
1、在前后台中,通讯协议为MODBUS,
MODBUS解析子程序中,当判断是“预置单个寄存器”时,做如下动作:
(1)、将预置值保存到RAM
(2)、执行某个子程序(例如需要修改波特率时,调用串口初始化程序)
(3)、触发EEPROM就绪中断,将预置值写到EEPROM中。
用UCOS-II如何实现。 任务的同步?其实操作系统用起来并不复杂,和以前编写程序差不了多少,只不过以前是各个功能依次执行的顺序结构,现在是各个功能单独写,然后设计怎么握手怎么交换数据而已。 这个简单,首先建立一个握手任务,这个任务用来“登陆”,一旦登陆成功
就给其它子任务发“邮件”就OK……也就是说,一开始所有任务都是运行的
只不过,所有子任务都在Pend邮件……只有一个任务在登陆,由它负责群发
邮件给子任务…… 其实,就像WINDOWS操作系统一样,开机时,必须输入登录密码,否则进不了操作系统。
和上述(2).的情况一样呀!。 我基本上已经看完了uCOS-II和陈明计先生的SMALL RTOS51。只不过想把前后台的代码移植到RTOS,感觉有点手生。
其实:RTOS就有点像前后台编程模式中:状态机编程,只不过又不完全相同,因为任务切换就是人为的模拟一次硬件中断,
任务切换时,首先保存断点PC指针,然后将现场信息保存到当前任务的私栈中,然后将堆栈变换到高优先级的堆栈中,从高优先级的堆栈依次弹出高优先级的现场,到CPU工作寄存器中,最后从堆栈中弹出高优先级的断点(PC指针),实现了任务切换。
就是下面两个问题困扰了我好久,想不出用RTOS编程如何实现:
1、在前后台中,通讯协议为MODBUS,
MODBUS解析子程序中,当判断是“预置单个寄存器”时,做如下动作:
(1)、将预置值保存到RAM
(2)、执行某个子程序(例如需要修改波特率时,调用串口初始化程序)
(3)、触发EEPROM就绪中断,将预置值写到EEPROM中。
用UCOS-II如何实现。
2、系统上电后,要求两个模块之间必须必须建立握手信号,
即模块A通过串口向模块B发送“1234”,模块B收到后,给模块A返回应答。
当模块A收到应答后,模块的其余的任务才能执行,否则模块A一直处于建立握手信号过程。
用UCOS-II如何实现。 既然你阅读了这些内容,这就好办了。对于你的情况,我深深地感到
有时候不知道原理也许是幸福的……感觉你考虑的太多了……
使用操作系统的好处就是忘记系统调度器的工作原理……认为系统是独占的。
如果系统是独占的,你会如何编写程序呢?
本贴被 Gorgon Meducer 编辑过,最后修改时间:2009-01-05,22:08:27. 根据您说的情况,可能要开2个Task。具体情况,三言两语说不清楚。
您看这样好么?我给你上传一本《uc/OSII》的中文版电子书,你先
系统的看一下,比较简单的。
有什么不明白的,你具体发帖子到论坛上来,我们一个堡垒一个堡垒
的攻破好么?理解到了才是学到了,这是我的信条哈。
点击此处下载 ourdev_571883.rar(文件大小:1.84M) (原文件名:嵌入式实时操作系统uCOS-II(中文版).rar) 那就写一个任务,一直等待主机主机的消息,Pending就可以了
得到数据以后,就初始化串口,改变波特率,然后写EEPROM就可以了阿……
注意在初始化串口的时候要设置临界区……防止其它任务操作串口…… 不明白上面的操作让你哪里不知道如何写?
因为看不懂你的问题,所以不知道怎么回答你…… 这个简单,首先建立一个握手任务,这个任务用来“登陆”,一旦登陆成功
就给其它子任务发“邮件”就OK……也就是说,一开始所有任务都是运行的
只不过,所有子任务都在Pend邮件……只有一个任务在登陆,由它负责群发
邮件给子任务…… 既然你阅读了这些内容,这就好办了。对于你的情况,我深深地感到
有时候不知道原理也许是幸福的……感觉你考虑的太多了……
使用操作系统的好处就是忘记系统调度器的工作原理……认为系统是独占的。
如果系统是独占的,你会如何编写程序呢?
本贴被 Gorgon Meducer 编辑过,最后修改时间:2009-01-05,22:08:27. 根据您说的情况,可能要开2个Task。具体情况,三言两语说不清楚。
您看这样好么?我给你上传一本《uc/OSII》的中文版电子书,你先
系统的看一下,比较简单的。
有什么不明白的,你具体发帖子到论坛上来,我们一个堡垒一个堡垒
的攻破好么?理解到了才是学到了,这是我的信条哈。
点击此处下载 ourdev_571883.rar(文件大小:1.84M) (原文件名:嵌入式实时操作系统uCOS-II(中文版).rar)
页:
[1]