·编写自己的软件模块 因为开发平台基于操作华统,所以很可能多个任务 和或同时访问同一个API函数。这就需要API函数必须 是可重入的。这里主要介绍如何使这些函数可重入, 和其它一些内容。 1.使用任务 2.禁止然后允许中断 3.使用信号量 4.使用数据队列 5.禁止然后允许任务调度 6.使用一个任务作为模块服务器 7复合方法
• 编写自己的软件模块 因为开发平台基于操作系统,所以很可能多个任务 和/或同时访问同一个API函数。这就需要API函数必须 是可重入的。这里主要介绍如何使这些函数可重入, 和其它一些内容。 1.使用任务 2.禁止然后允许中断 3.使用信号量 4.使用数据队列 5.禁止然后允许任务调度 6.使用一个任务作为模块服务器 7.复合方法
·编写自己的软件模块 因为开发平台基于操作系统,所以很可能多个任务 和/或同时访问同一个API函数。这就需要API函数必须 是可重入的。这里主要介绍如何使这些函数可重入, 和其它一些内容。 1.使用任务 有一些设备需要CPU周期为其服务,典型的是扫描显示和扫描 键盘。可以给它们分配相应的任务,与用户任务一起调度。这样, 就可以使用任何任务间通信的方法实现。 Te G 键盘扫描 通信 用户任务 通信 显示任务 任务 操作条统内核
• 编写自己的软件模块 因为开发平台基于操作系统,所以很可能多个任务 和/或同时访问同一个API函数。这就需要API函数必须 是可重入的。这里主要介绍如何使这些函数可重入, 和其它一些内容。 1.使用任务 有一些设备需要CPU周期为其服务,典型的是扫描显示和扫描 键盘。可以给它们分配相应的任务,与用户任务一起调度。这样, 就可以使用任何任务间通信的方法实现。 键盘扫描 任务 用户任务 显示任务 操作系统内核 通信 通信
·编写自己的软件模块 2.禁止然后允许中断 有一些设备需要的访问时间很短,如全局变量。它们可以通过 禁止中断—访问设备—允许中断的方式编写软件模块。 中断服务函数 ☐允许中断 禁止中断 全局变量 任务A
• 编写自己的软件模块 2.禁止然后允许中断 有一些设备需要的访问时间很短,如全局变量。它们可以通过 禁止中断——访问设备——允许中断的方式编写软件模块。 任务A 允许中断 禁止中断 中断服务函数 全局变量
·编写自己的软件模块 3.使用信号量 一些设备需要的访问时间比较长,使用方法2可能造成关中断时 间过长。此时可以使用信号量来编写软件模块。具体过程为申请信 号量—访问设备—发送信号量。 访问独享资 信号量申请成 功后,可以访 源之前申清 问独享资源 信号量 任务A 信号量 任务B 独享资源 其它任务申请信 任务C 号量受阻,不能 访问独享资源
• 编写自己的软件模块 3.使用信号量 一些设备需要的访问时间比较长,使用方法2可能造成关中断时 间过长。此时可以使用信号量来编写软件模块。具体过程为申请信 号量——访问设备——发送信号量。 信号量 访问独享资 源之前申请 信号量 其它任务申请信 号量受阻,不能 访问独享资源 独 享 资 源 任务A 任务B 任务C 信号量 信号量申请成 功后,可以访 问独享资源
·编写自己的软件模块 4.使用数据队列 有一些设备具有自己的中断,典型的是串口输出。可以利用消 息队列将用户任务需要的服务通过消息、队列排队、缓冲起来,利用 中新功能依次服务。 任务A 任务B 中断服务函数 数据队列 任务C
• 编写自己的软件模块 4.使用数据队列 有一些设备具有自己的中断,典型的是串口输出。可以利用消 息队列将用户任务需要的服务通过消息队列排队、缓冲起来,利用 中断功能依次服务。 任务A 任务B 任务C 中断服务函数 数据队列