ucos-ii示例2:信号量测试

发布者:asd123yui最新更新时间:2020-10-15 来源: eefocus关键字:ucos-ii  信号量测试  stm32f103VE 手机看文章 扫描二维码
随时随地手机看文章

环境:


主机:WIN8


开发环境:MDK4.72


ucgui版本:3.90


ucos版本:ucos-ii


mcu: stm32f103VE


说明:


本示例新建一个信号量,task1接收信号量,task2发送信号量。task1时间片为1s/次,task2时间片3s/次。可以看到,因为信号量的关系,task1输出也是3s/次。


注意:


1.信号量的创建不能在内核初始化之前


源码:

#define TASK_STK_SIZE 512

/*********************************************************************

* 静态函数

**********************************************************************/

 

static void task_start(void *pdata);

static void task1(void *pdata);

static void task2(void *pdata);

 

/*********************************************************************

* 静态变量

**********************************************************************/

 

/*********************************************************************

* 任务堆栈空间

**********************************************************************/

 

static OS_STK Task_Start_Stk[TASK_STK_SIZE];

static OS_STK Task1_Stk[TASK_STK_SIZE];

static OS_STK Task2_Stk[TASK_STK_SIZE];

 

/*********************************************************************

* 信号量

**********************************************************************/

 

OS_EVENT *Semaphore;

 

/*********************************************************************

* 函数

**********************************************************************/

 

int main(void)

{

//初始化内核

OSInit();

//创建任务

OSTaskCreate(task_start,(void *)0,Task_Start_Stk + TASK_STK_SIZE - 1,0);

//启动任务

OSStart();

}

 

/*********************************************************************

* 任务函数

**********************************************************************/

 

static void task_start(void *pdata)

{

//载入世界

world_load();

//设置背景色

GUI_SetBkColor(0xb07c17);

GUI_Clear();

GUI_SetColor(GUI_BLACK);

Semaphore = OSSemCreate(1);

//新建任务

OSTaskCreate(task1,(void *)0,Task1_Stk + TASK_STK_SIZE - 1,1);

OSTaskCreate(task2,(void *)0,Task2_Stk + TASK_STK_SIZE - 1,2);

while(1)

{

OSTimeDlyHMSM(0,0,3,0);

}

}

 

static void task1(void *pdata)

{

char str[30] = {0};

uint8_t err = 0;

 

while(1)

{

//请求信号量,超时时间5s

OSSemPend(Semaphore,5000,&err);

//显示

sprintf(str,"task1 time:%ds",OSTimeGet());

GUI_DispStringHCenterAt(str, 120, 5);

WM_Exec();

OSTimeDlyHMSM(0,0,1,0);

}

}

 

static void task2(void *pdata)

{

char str[30] = {0};

 

while(1)

{

//发送信号量

OSSemPost(Semaphore);

//显示

sprintf(str,"task2 time:%ds",OSTimeGet());

GUI_DispStringHCenterAt(str, 120, 20);

WM_Exec();

OSTimeDlyHMSM(0,0,3,0);

}

}


关键字:ucos-ii  信号量测试  stm32f103VE 引用地址:ucos-ii示例2:信号量测试

上一篇:ucgui界面设计示例2
下一篇:给android设备增加串口功能

推荐阅读最新更新时间:2024-11-04 06:58

基于nRF24L01的矿用搜救器设计
引言    在煤矿生产自动化中,人员定位系统发挥了越来越大的作用。现在国内外大多数煤矿使用的人员定位系统都是基于2.4GHz工业无线通信标准设计的,该定位系统主要由装在矿井巷道的定位分站和配戴在工人身上的目标识别卡协同工作来完成人员定位。然而定位分站并不是在每一个巷道都安装,在没有安装定位分站的巷道就不能实现人员定位;而且由于事故原因引起的定位分站不能正常工作导致的被困人员不能正常定位,以致营救困难等现象也屡见不鲜。鉴于以上客观原因,本设计就显得具有明显的实际意义。    搜救器系统设计    搜器系统主要由电源模块、主控制器模块、2.4GHz无线通信模块、红外通信模块、FLASH存储器模块、OLED显示模块和触摸
[网络通信]
基于nRF24L01的矿用搜救器设计
uC/OS-II在51单片机上的移植2
文件名 : YY.C #i nclude #define MAX_STK_SIZE 64 void TaskStartyya(void *yydata) reentrant; void TaskStartyyb(void *yydata) reentrant; void TaskStartyyc(void *yydata) reentrant; OS_STK TaskStartStkyya ;//注意:我在ASM文件中设置?STACK空间为40H即64,不要超出范围。 OS_STK TaskStartStkyyb ;//用户栈多一个字节存长度 OS_STK TaskStartStkyyc ; void main(void)
[单片机]
ucos-ii学习笔记——信号量集(事件标志组)的原理及使用
Created on: 2012-10-8 Author: zhang bin 学习笔记 for ucos-ii PC redesigned by zhang bin 2012-10-8 versions :V-0.1 All Rights Reserved #include INCLUDES.h #define TASK_STK_SIZE 512 OS_STK StartTaskStk ; //起始任务 OS_STK MyTaskStk ; OS_STK Y
[单片机]
UC/OS-II中动态内存管理方案的改进与实现
1、引言 嵌入式系统的内存资源相当有限,所以需对其进行合理的规划和管理,即需要满足其管理特点:【1】快速性、可靠性和高效性。 随着嵌入式应用软件规模的增长,人们希望DSA在满足以上特性的同时,更能够被方便而充分地使用。而UC/OS-II的DSA功能较弱,所以对其进行改进是很有必要的。 2、RTOS的DSA概览【2】【3】【4】【5】 按照记录以及合并空闲内存块的方法,可将RTOS的DSA分成顺序搜索、索引搜索、分类搜索、位图搜索以及伙伴算法等。这些DSA算法都具有分配真实内存,立即合并空闲内存等特点。 2.1  顺序搜索算法 顺序搜索算法采用单向或双向链表维护空闲内存。该算法的时间花费与空闲内存链表长度成正
[嵌入式]
uc/OS-II下ARM7定时器捕获实现红外解码
今天下午的时候,调试努力之下,终于把红外解码弄出来了。 其实以前有次比赛的时候就已经用到了红外,只是那次用的是51单片机,用的是外部中断和延时检测脉宽来进行解码,因为51的时钟这些比较简单,所以解码很容易就正确了。但是现在换到了ARM7平台下,由于对它的不是很熟悉,怎么用普通语句实现精确延时对我来说是个难点。最后考虑用两个方案来实现红外的解码。方案一是用外部中断加定时器延时检测脉宽进行解码,但是结果并没有我想的那样美好,调试了半天也没有实现正确的解码,个人认为是任务节拍的影响,但是确实不知道该怎么修改,最后放弃方案一,改用方案二,用定时器捕获实现红外的解码,并最终实现。 LPC2103芯片带有定时器捕获,可以设置为下降沿,上升沿或双
[单片机]
uc/OS-II下ARM7定时器捕获实现红外解码
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved