历史上的今天
今天是:2024年10月15日(星期二)
2020年10月15日 | ucos-ii示例2:信号量测试
2020-10-15 来源:eefocus
环境:
主机: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设备增加串口功能
史海拾趣
|
任务书 (一):已知 (1)系统最大运行方式为四台发电机满发和系统投入运行;系统最小运行方式为停两台发电机(F1,F3),各负荷减半. (2)系统各负荷及线路参数如图所示,各变压器及发电机型号分别为: F1~F4:SF-100-40/8540Pe=100MWUe=13. ...… 查看全部问答> |
|
(顶层模块): module my_uart_top(clk,rst_n,rs232_rx,rs232_tx); input clk; // 50MHz主时钟 input rst_n; //低电平复位信号 input rs232_rx; // RS232接收数据信号 output rs232_tx; // RS232发送数据信号 wire bps_start; / ...… 查看全部问答> |
|
大联大控股旗下凯悌集团推出车用影音之最佳电源管理解决方案: 目前车用影音系统已不单纯是CD或卡式录音带,更演进至DVD/MP3/SD card/Car TV/GPS等多合一车用影音系统,坊间改装更是大行其道。针对车用影音系统,AME提供适合之LDO与高效率DC-DC ...… 查看全部问答> |
|
1、结合产品选择助焊剂。 自身产品的档次及产品本身的特点,是选择助焊剂时首先考虑的条件,高档次的产品如电脑主板、板卡等电脑周边产品及其他主机板或高精度产品,一般选择高档次免清洗助焊剂,也有少数客户用清洗型助焊剂焊后再进行清 ...… 查看全部问答> |
|
本帖最后由 paulhyde 于 2014-9-15 03:58 编辑 用S52单片机驱动,模块是龙丘的,但那个公司提供的程序相当有问题,如果是用52单片机的同学根本不会用,搞得头都大了,我经过两天整理,现在终于可以用了。可以显示X与Y轴的重力加速度与角度,现在我 ...… 查看全部问答> |
|
ATX电源是计算机的工作电源,作用是把交流220V的电源转换为计算机内部使用的直流5V,12V,24V的电源。 ATX电源特点 与AT电源相比,ATX电源增加了“+3.3V、+5VSB、PS-ON”三个输出.其中“+3.3V”输出主要是供CPU用,而“+5VSB”、“PS ...… 查看全部问答> |
|
此前活动贴:十五集连续剧【当“骑行”遇到“TI产品”】正式放映 https://bbs.eeworld.com.cn/thread-349230-1-1.html 国庆前后15天的台湾之旅非常 ...… 查看全部问答> |




