博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ucos-ii示例3 互斥型信号量测试
阅读量:3949 次
发布时间:2019-05-24

本文共 2922 字,大约阅读时间需要 9 分钟。

               


ucos-ii示例3:互斥型信号量测试

本文博客链接:,作者:jdh,转载请注明.

环境:

主机:WIN8

开发环境:MDK4.72

ucgui版本:3.90

ucos版本:ucos-ii

mcu: stm32f103VE

说明:

本示例新建一个互斥型信号量,通过此信号量每次只能有1个任务使用资源函数resource

注意:

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

2.互斥型信号量的请求和释放函数只能在同一个任务中执行,如果一个任务请求了信号量,另一个任务释放信号量的操作会失败

3.为了应对信号量导致的不同任务之间的优先级反转,互斥型信号量的创建需要设置一个优先级,且这个优先级必须是尚未使用的,否则会创建失败

效果图:

源码:

#define TASK_STK_SIZE  512    /**********************************************************************       静态函数**********************************************************************/static void task_start(void *pdata);static void task1(void *pdata);static void task2(void *pdata);static void resource(char *task_name);/**********************************************************************       静态变量**********************************************************************//**********************************************************************       任务堆栈空间**********************************************************************/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,10);  //启动任务 OSStart();}/**********************************************************************       任务函数**********************************************************************/static void task_start(void *pdata){  uint8_t err = 0;  //载入世界 world_load();  //设置背景色 GUI_SetBkColor(0xb07c17); GUI_Clear(); GUI_SetColor(GUI_BLACK);  Semaphore = OSMutexCreate(0,&err);  //新建任务 OSTaskCreate(task1,(void *)0,Task1_Stk + TASK_STK_SIZE - 1,11); OSTaskCreate(task2,(void *)0,Task2_Stk + TASK_STK_SIZE - 1,12);  while(1) {  OSTimeDlyHMSM(0,0,3,0); }}static void task1(void *pdata){ char str[30] = {
0}; uint8_t err = 0; while(1) {  //请求信号量  OSMutexPend(Semaphore,0,&err);    //显示  sprintf(str,"task1 time:%ds",OSTimeGet());  GUI_DispStringHCenterAt(str, 120, 5);  WM_Exec();  OSTimeDlyHMSM(0,0,1,0);    //使用资源  resource("task1");    //释放信号量  OSMutexPost(Semaphore); }}static void task2(void *pdata){ char str[30] = {
0}; uint8_t err = 0; while(1) {  //请求信号量  OSMutexPend(Semaphore,0,&err);    //显示  sprintf(str,"task2 time:%ds",OSTimeGet());  GUI_DispStringHCenterAt(str, 120, 20);  WM_Exec();  OSTimeDlyHMSM(0,0,3,0);    //使用资源  resource("task2");    //释放信号量  OSMutexPost(Semaphore); }}static void resource(char *task_name){ char str[30] = {
0}; //显示 sprintf(str,"%s use resource:%ds",task_name,OSTimeGet()); GUI_DispStringHCenterAt(str, 120, 40); WM_Exec();}

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!

你可能感兴趣的文章
带团队的点滴心经
查看>>
五种力量让你如虎添翼
查看>>
你害怕创新吗
查看>>
创新服务的七要素
查看>>
虚伪的奉承也有效
查看>>
蒂姆·库克的五项核心领导力
查看>>
你为何没有成为领导者
查看>>
一切悲剧都源于不当激励
查看>>
别把用户的高期望混同于好体验
查看>>
动机和机会:推动商业发展的引擎
查看>>
4个信号表明你是一个失败的领导
查看>>
成功谈判 你需要几个锦囊?
查看>>
一个人的宽度决定了他的高度
查看>>
善于拜访是另一种经营智慧
查看>>
打造新老员工双赢机制变对立为统一
查看>>
企业如何避免用错人
查看>>
打掉苹果“无与伦比”的傲慢(人民时评)
查看>>
Creating an Android Project
查看>>
Running Your App (android)
查看>>
Starting Another Activity
查看>>