【iCore4 双核心板_uC/OS-II】例程十:信号量集
一、实验说明:
在实际应用中,任务常常需要与多个事件同步,即要根据多个信号量组合作用的结果来决定任务的运行方式。UCOSII为了实现多个信号量组合的功能定义了一种特殊的数据结构——信号量集。
二、实验截图:
三、源代码下载链接:
链接:https://pan.baidu.com/s/13USFy25QX-e3WjFGmGClfA 密码:jgmj
四、核心代码:
- /*
- * Name : main
- * Description : ---
- * Author : liu.
- *
- * History
- * --------------------
- * Rev : 0.00
- * Date : 07/12/2017
- *
- * create.
- * --------------------
- */
- /*实验现象:
- 打开串口工具putty.exe,按下按键ARM.KEY,终端显示信号量集的状态;松开按键,停止显示。
- 信号量的16位分别循环置1。
- */
- int main(void)
- {
- system_clock.initialize(); //系统时钟初始化
- led.initialize(); //LED初始化
- usart6.initialize(); //串口初始化
- key.initialize();
- usart6.printf("\x0c"); //清屏
- usart6.printf("\033[1;32;40m"); //设置字体终端为绿色
- usart6.printf("\r\n Hello, I am iCore4!\r\n\r\n");
- LED_RED_ON;
- OSInit();
- //UCOS初始化
- OSTaskCreate(start_task, //创建开始任务
- (void*), //任务参数
- (OS_STK*)&START_TASK_STK[START_STK_SIZE-], //任务堆栈
- START_TASK_PRIO); //任务优先级
- OSStart(); //开启UCOS
- }
- /*
- * Name : start_task
- * Description : ---
- * Author : liu.
- *
- * History
- * --------------------
- * Rev : 0.00
- * Date : 07/12/2017
- *
- * create.
- * --------------------
- */
- void start_task(void *pdata)
- {
- u8 err;
- OS_CPU_SR cpu_sr;
- TaskFlag = OSFlagCreate(,&err);//创建信号量集
- OSStatInit();//初始化统计任务
- OS_ENTER_CRITICAL();//关中断
- OSTaskCreate(AppTask1_task,(void*),(OS_STK*)&AppTask1_TASK_STK[AppTask1_STK_SIZE-],AppTask1_TASK_PRIO);//创建AppTask1任务
- OSTaskCreate(AppTask2_task,(void*),(OS_STK*)&AppTask2_TASK_STK[AppTask2_STK_SIZE-],AppTask2_TASK_PRIO);//创建AppTask2任务
- OSTaskSuspend(OS_PRIO_SELF);//挂起start_task任务
- OS_EXIT_CRITICAL();//开中断
- }
- /*
- * Name : AppTask1_task
- * Description : ---
- * Author : liu.
- *
- * History
- * --------------------
- * Rev : 0.00
- * Date : 07/12/2017
- *
- * create.
- * --------------------
- */
- void AppTask1_task(void *pdata)
- {
- u8 err;
- int i = ;
- while(){
- if(ARM_KEY_STATE == KEY_DOWN){ //按键按下
- i++;
- if(i < OS_FLAGS_NBITS){
- OSFlagPost(TaskFlag,i,OS_FLAG_SET,&err); //设置第0位的信号为1
- }else{
- i=;
- }
- }
- OSTimeDlyHMSM(,,,); //延时500ms
- }
- }
- /*
- * Name : AppTask2_task
- * Description : ---
- * Author : liu.
- *
- * History
- * --------------------
- * Rev : 0.00
- * Date : 07/12/2017
- *
- * create.
- * --------------------
- */
- void AppTask2_task(void *pdata)
- {
- u8 err;
- u16 flag;
- while(){
- flag = OSFlagQuery(TaskFlag,&err); //查询信号量集的状态
- if(flag != ){
- usart6.printf("The %d bit is set to high.\r\n",flag);
- OSFlagPost(TaskFlag,(OS_FLAGS)flag,OS_FLAG_CLR,&err);//信号置0
- }
- OSTimeDlyHMSM(,,,); //延时500ms
- }
- }
iCore4链接:
【iCore4 双核心板_uC/OS-II】例程十:信号量集的更多相关文章
- 【iCore4 双核心板_uC/OS-II】例程四:软件定时器
一.实验说明: 一些应用程序执行它们的任务时需要延迟一段特定的时间,因此uC/OS-II为我们提供了一些相应的 延时函数,本例程我们使用软件定时器定时500ms点亮相应的LED实现三色LED循环闪烁. ...
- 【iCore4 双核心板_uC/OS-II】例程二:任务的建立与删除
一.实验说明: 本例程建立三个任务,通过任务寄存器来实现任务的建立与删除功能.红灯和绿灯同时以固定 频率闪烁,当任务寄存器为5时,删除绿灯闪烁的任务LED1,此时只有红灯闪烁,当任务寄存器的 值为10 ...
- 【iCore4 双核心板_uC/OS-II】例程十一:内存管理
一.实验说明: 应用程序在运行中为了某种特殊需要,经常需要临时获得一些内存空间.而作为比较完善的操作系统uC/OS-II,也具有动态分配内存的能力. uC/OS-II对内存进行两级管理:把连续内存分成 ...
- 【iCore4 双核心板_uC/OS-II】例程九:消息队列
一.实验说明: 前面介绍通过信息传递可以进行任务间的交流,信息也可以直接发送给一个任务,在uC/OS-II中每一个任务在它们内部都有一个消息队列,也即任务消息队列,用户可以直接给一个任务发送消息,不需 ...
- 【iCore4 双核心板_uC/OS-II】例程八:消息邮箱
一.实验说明: 消息邮箱是uC/OS-II中的另一种通信机制,可以使一个任务或者中断服务子程序向另一个任务发送一个指针型的变量.通常该指针指向一个包含了“消息”的特定数据结构. 二.实验截图: ...
- 【iCore4 双核心板_uC/OS-II】例程七:互斥信号量
一.实验说明: 在介绍互斥信号量前,我们先简单地描述一下什么是优先级反转.使用实时内核心,优先级反转问题是实时系统中出现得最多的问题.假设任务H优先级高于任务M,任务M优先级高于任务L.任务H和任务M ...
- 【iCore4 双核心板_uC/OS-II】例程六:信号量——任务同步
一.实验说明: 信号量是一个多任务内核提出的一个协议机构,上一个实验中我们介绍了信号量访问共享资源 的功能,其实信号量最初是用来控制访问共享资源的,它还可以用来同步一个中断服务函数和一个任 务,或者同 ...
- 【iCore4 双核心板_uC/OS-II】例程五:信号量——共享资源
一.实验说明: 信号量是操作系统中的一类事件,是实现任务间通信的一个中间环节.当系统中的多个任务 在运行时,经常需要互相无冲突地访问同一个资源,或者需要互相支持的依赖,甚至有时还要互 相加以必要的限制 ...
- 【iCore4 双核心板_uC/OS-II】例程三:任务的挂起与恢复
一.实验说明: 当一个任务正在运行的时候,由于某种情况可能需要终止运行一段时间,终止的这段时间就是 所谓的任务的挂起,可以由该任务自身或者其他任务来挂起一个任务.当被挂起的任务需要再次运 行的时候,可 ...
随机推荐
- jquery利用正则表达式验证密码,手机号(主要是使用方法,正则表达式网上一搜一堆)
var mobile = $("#UserMobile").val(); if (mobile != "") { }-\d{}|\d{}-\d{,})|([|| ...
- Bluestein's Algorithm
网上很少有人提到,写的也很简单,事实上就是很简单... \(Bluestein's\ Algorithm\),用以解决任意长度\(DFT\). 考虑\(DFT\)的形式:\[\begin{aligne ...
- LeetCode(283. 移动零)
问题描述 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序. 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明: 必须在原数 ...
- [AHOI2009]维护序列
OJ题号:洛谷2023.BZOJ1798 思路: 参见[洛谷3373][模板]线段树 2 #include<cstdio> #include<cctype> #include& ...
- vue的生存周期
钩子函数 created 实例已经创建 befoCompile 编译之前 compiled 编译之后 ready 插入到文档 beforeDestroy 销毁之前 destroyed 销毁之后
- HTML5:在移动端禁用长按选中文本功能
很多时候,我们在写的手机页面需要用户进行长按然后响应一个事件.但是在微信中用户的长按操作被默认为谈出来一个复制的选项.那么这个时候如何去禁止这个东西呢? 其实很简单,方法看下面: 只需要在你需要禁止的 ...
- 用SSH登录远程的机器,在远程机器上执行本地机器上的脚本
假设本地的机器IP为10.245.111.90,我们想要在10.245.111.93上执行一个保存在10.245.111.90上的脚本. 经过测试通过的命令如下: ssh root@10.245.11 ...
- Centos7 设置、查看、添加、删除服务的开机启动项
查看开机启动项 systemctl list-unit-files | grep enable 为服务添加开机启动项 systemctl enable zabbix-server.service ...
- OpenCV3 for python3 学习笔记3-----用OpenCV3处理图像一
本文的内容都与图像处理有关,这时需要修改图像,比如要使用具有艺术性的滤镜.外插(extrapolate)某些部分.分割.粘贴或其他需要的操作. 1.不同色彩空间的的转换 OpenCV有数百种关于在不同 ...
- 9 月份 GitHub 上最火的 JavaScript 开源项目!
推荐 GitHub 上9 月份最受欢迎的 10 个 JavaScript 开源项目,在这些项目中,你有在用或用过哪些呢? 1.基于 Promise 的 HTTP 客户端 Axios https://g ...