环境:
主机: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);
}
}
上一篇:ucgui界面设计示例2
下一篇:给android设备增加串口功能
推荐阅读最新更新时间:2024-11-04 06:58
设计资源 培训 开发板 精华推荐
- 基于FPGA的以太网控制器(MAC)源码
- 使用 Analog Devices 的 LTM4636-1EY 的参考设计
- XL6008电源模块
- 用于开/关控制应用的 AM2G-4824SZ 24V 2 瓦 DC-DC 转换器的典型应用
- LTC1406 低功耗、8 位、20Msps 采样 A/D 转换器的典型应用
- LTM8053EY 从同一输入源供电以获得更多输出电流的典型应用电路
- LT6656BIDC-4.096、4.096V 升压输出电流电压基准的典型应用
- SBC-S32V234: S32V视觉和传感器融合评估板
- 使用 ON Semiconductor 的 STK350-030 的参考设计
- LTM4650EY-1A 1.2V 和 1V 输出跟踪的典型应用电路
- 直播|基于英特尔® Agilex™ FPGA F-Tile的以太网硬核IP详解及如何使用oneAPI对FPGA编程
- 【下单全额返现,300元封顶,不限产品】MPS商城钜惠体验季!
- 【抢楼赢礼】聊聊我用过的MOSFET!
- 2020 STM32全国研讨会火热报名中,新技术新方案等你收获,还有好礼拿!
- 一天一个Webench设计,看谁能撑30天?
- 有奖直播:超小型封装 TI MSPM0 MCU 可优化设计空间,实现更多可能
- 来翻牌吧!解锁示波器的N种玩法
- TI 有奖直播|业界超精确3D霍尔效应位置传感器
- 有奖直播|如何借助Mentor Xpedition AMS对汽车CAN总线进行仿真优化分析?
- Microchip 有奖问答,信号增益或滤波的原始传感器应用方案