UCOSII task 任务建立笔记记录

UcosII 笔记 ucosii的移植,需要修改三个文件:os_cpu.h 定义与编译器无关的数据类型,放置处理器相关代码和几个函数原型。 os_cpu_a.asm 需要汇编完成对一些函数,主要就是任务切换函数; os_cpu_c.c 定义一些用户HOOK函数。所谓的任务,即是一个死循环函数。 任务优先级:ucosii不支持多个任务优先级相同,每个任务的优先级必须不一样。 任务堆栈 :存储器中的一片连续存储空间 阅读详情

声明:首先,我只用过UCOSII,因此对于UCOS III 不熟,但是大同小异,UCOS III的任务数没有局限而已,这是我的认为,下面就说一下你的程序吧,只是建议

  1. 从main()开始,建议创建任务时使用的函数OSTaskCreateExt(),而不使用,OSTaskCreate(),其好处,网上可以自己查。在任务创建后可以使用OSTaskNameSet(),目的是:指定任务的名称,用于调试。这个函数是可选的,但是建议加上,不要省掉这一步例如:
#define    TASK_START_NAME          "Start Task"
OSTaskNameSet(STARTUP_TASK_PRIO, TASK_START_NAME, &err)
  1. 在上一步之后要加上这句话OSTimeSet(0);节拍计数器清0,节拍计数器是0-4294967295,虽然节拍器不是那么容易就溢出,但是不能不考虑这种情况,尤其是在长时间使用的过程中,有可能就会溢出,这样就造成死机的现象。OSStart(&err) 我记得只要OSStart()就可以,当然这个无所谓。
  2. 那么就是主任务了,这个主任务,我觉得不是很满意,我记得我给你讲过,在主任务中去执行你的功能,因为主任务的优先级最高,这样做是非常传统的做法,也是很符合逻辑的做法,因此,我建议做出一下改动:
    A. 如果main()中存在很多初始化的地方,有时会报错的,在此我不举例子,但是建议将部分初始化的函数放在,Task_Start()内,这一点可有可无,只是经验而已。
    B. 将你创建的任务不要统统都放在主任务中,很不合理,你可以把这些任务打包,然后主任务调用,其次就是你没有必要在开个Task_Main任务,这不是多此一举吗,这一点很重要,我建议如下:
 void Task_Start(void *p_arg)
{
    OS_ERR err;
(void)p_arg;    
//一些初始化的东西也可以放在这儿,随便
    AppTaskCreate();//打包任务
While(1)
{
//这里面就是写的你的主要功能,标志位什么的
都在这里面写

//见你使用的是OSTimeDly,在此不建议在任务结尾出使用这个函数,但可以在中间使用,两者的差别可以到网上查,在你的系统做的非常大的时候,会出现很多问题,但在中间建议使用自己写的延时函数,因为这样不容易造成逻辑混乱,但有的地方必须使用,那就是需要任务中间切换才使用。当然OSTimeDly与II中的不太一样,这需要你自己考量了。
OSTimeDlyHMSM(0, 0, 0, 1000);
}
}
OS_EVENT *TaskMbox;//可以创建邮箱,实际上也可以
创建,看你想不想学
OS_EVENT *TaskUpdate;   //时间刷新标志,创建信号量,
    static void AppTaskCreate (void)
{
    CPU_INT08U      err;
TaskMbox = OSMboxCreate((void *)0);//你可以创建了放在这儿,也许可以用到,我觉得能用得到
  TaskUpdate =OSSemCreate(1);
OSTaskCreateExt(任务一);
OSTaskNameSet();
OSTaskCreateExt(任务二);
OSTaskNameSet();

}

C. OSTaskChangePrio()我不知道你为什么使用这个函数,你的目的是什么,切换任务的优先级,那么我告诉你,这样做是很不好的,很容易就把逻辑搞混乱了,而且你的系统根本就不大,为什么要使用优先级切换,再说,你的优先级很明确,不存在并列的那种,OSTaskChangePrio函数的主要用途,以我的个人理解是,弥补UCOS系统解决任务间的时间片轮转的,因为UCOS是内核抢占,不存在时间片轮转,OSTaskChangePrio就是为了解决这一点才这样做的,但是对于III,我就不清楚了,但应该也是一样的把,因此建议把各个任务中的OSTaskChangePrio()变成OSTimeDlyHMSM(0, 0, 0, 1000),就可以了,当然,你没在这个函数中做优先级切换这个动作,那我觉得更没必要了。
D. 其次也是最重要的环节,就是任务的开辟问题,你怎么开这么多任务啊,没必要啊,我觉的你的任务可以开一下结果:
主任务(3)、key任务(4)、串口任务(建议不要)、服务器任务(这个目前还不清楚,传输的数据是什么,这个不好定),我觉得这样就够了,没必要,每个模块都开任务,很不合理,比如GSM发短信模块,就没必要单独拿出来
就拿key任务来说吧:

static void Task_Key(void *p_arg)
{
(void)p_arg;    
While(1)
{
If(1== key_gsm)//发短信标志,当然也可以在这里直接发短信,如果延时很短的话,但建议不要这样做
GSM_Part=1;
OSTimeDly(100);//这里建议使用阻塞延时,转换为III的形式,自己转把
If(1== key_sound)//这个按键很特殊就是循环播报与否的开关,也可以使按键,如果是按键,就能向下面这样变成了,//可以这样写If(1== key_sound)   {  if(1== Sound_Part)   Sound_Part=0; else  Sound_Part=1;}
    Sound_Part=1;
else  Sound_Part=0;
OSTimeDly(100);
}
}

到此也就基本上结束了!!只是建议,我只看了个大概,所以目前只能这样了,明天晚上我会把程序写好,发过去你这个我感觉有很大的问题,暂时先不加服务器通信那一块,因为我还不清去那一块需要所消耗的时间和逻辑情况和数据情况,要不要开任务,这都要把驱动写好才能决定的。

UCOSii(一)——系统初始化 一、闲扯之前看完了sdcc man和datasheet之后,用sdcc写了几个小程序。大部分时间都在干一些调式代码的事,就趁这段时间把UCOS复习一下吧。由于这是UCOS的第一篇,就来扯点闲话吧。对于UCOSii,我其实没有在实际的项目中用到过。只是记得在以前看过一本UCOS作者自己写的书,书名已经忘记了。这种语言或者系统架构的设计者写的书往往看起来很有意思,因为作者不仅会给你解释代码,还会告诉你他 阅读详情

相关推荐

LPC1113上的UCOSII 2.52操作系统移植与串口测试教程

本文还有配套的精品资源,点击获取 简介:本教程详细阐述了如何将实时操作系统UCOSII 2.52移植到LPC1113微控制器上,并通过三个串口测试任务验证其功能性与稳定性。介绍了操作系统与硬件兼容性测试,串口通信的初始化与中断处理,以及在微控制器环境下的多任务调度。这对于嵌入式系统开发者学习和研究LPC1113和UCOSII具有重要价值。 1. LPC1113微控制器...

weixin_42502089的博客 1744

ucosiii-常用api

这仅仅是对一些常用的 API 函数进行部分介绍,实际上 uC/OS-III API 非常丰富,可根据具体的应用场景进行调用。uC/OS-III 提供了许多 API 函数,可以根据需要选择使用。

weixin_53592457的博客 482

华硕ROG玩家国度安装Ubuntu双系统避坑指南:安全启动密钥那些事儿

本文详细解析了在华硕ROG玩家国度设备上安装Ubuntu双系统时,如何正确处理BIOS中的安全启动(Secure Boot)与密钥管理,避免常见的引导失败和Windows系统无法启动问题。指南提供了从数据备份、启动盘制作到BIOS精细设置(如将OS Type改为Other OS而非简单关闭Secure Boot)以及分区规划的完整流程,确保两个系统都能稳定共存。

weixin_29219189的博客 755

【深入实践ucos-ii】任务管理函数

创建任务 ucos-ii使用OSTaskCreate()和OSTaskCreateExt()来创建新任务。 OSTaskCreate()函数声明如下: INT8U OSTaskCreate(void(*task)(void *p_arg), void *p_arg, OS_STK *ptos, INT8U prio); 参数说明: void(*task)(void *p_arg)

图像、视频、算法、Linux 1万+

Windows10开机无限蓝屏(SrtTrail.txt)

这个问题已经有很多的大佬发过解决办法了,这里仅仅作为自己日后方便查找所写文章 无法开机——自动修复失败,报SrtTrail.txt文件错误,且陷入无限蓝屏的循环 事故 故事的起因是这样的: 开开心心的组装电脑,花了几天时间来配置,然后发现USB3.0的接口太少,于是在某宝上搞到一张pcie转7口USB3.0的转接卡,往电脑上一插 插电,开机,电流轻松跑上去 然后,它和原来的磁盘阵列卡冲突,跳过阵列卡自检直接进入系统,boom,就导致了这场悲剧 解决方法 在蓝屏的界面找到:疑难解答->通过命令提示符 使

Holo__的博客 3万+

基于车牌识别的停车收费系统的设计与实现(源码+开题)

本系统(程序源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景: 随着城市化进程的加速和汽车保有量的增加,停车难成为了一个普遍存在的问题。传统的停车收费方式存在着效率低下、管理混乱等问题。因此,开发一款基于车牌识别的停车收费系统具有重要的现实意义。研究意义: 基于车牌识别的停车收费系统可以有效地解决传统停车收费方式在效率和准确性方面的问题,提高停车服务的效率和质量。

迟限程序设计 1393

OSTaskCreateExt()建立任务

OSTaskCreateExt()建立任务

qq_38636482的博客 2047

从外包到转正:一个华为OD亲历者的真实工作体验与避坑指南

本文分享了一位华为OD员工从外包到转正的真实经历与实用建议。通过详细解析华为OD的日常工作、转正核心指标、机试备考技巧及职场突围策略,为读者提供了一份全面的避坑指南。特别针对机试E卷的高频考点和刷题方法,给出了具体的数据分析和实战经验。

weixin_33686714的博客 710

void OSTaskNameSet (INT8U prio, INT8U *pname, INT8U *)函数的作用

OSTaskNameSet 是 uC/OS-II(一种广泛应用的嵌入式实时操作系统)中的一个函数,其作用是为指定优先级的任务设置一个可读的名称。在这个示例中,我们创建了一个任务,并使用 OSTaskNameSet 函数为该任务设置了一个名称 “My Task”。同时,我们检查了函数返回的错误码,以确保操作成功。该函数的主要功能是为指定优先级的任务赋予一个用户自定义的名称。在调试和监控系统时,为任务设置名称可以让开发者更直观地识别各个任务,方便定位问题和了解系统的运行状态。// 定义任务优先级。

weixin_44799641的博客 281

深入解析BlueZ5与D-Bus:Linux蓝牙开发实战指南

本文深入解析BlueZ5与D-Bus在Linux蓝牙开发中的核心应用,提供从环境搭建到实战开发的完整指南。通过详细代码示例和调试技巧,帮助开发者掌握蓝牙协议栈与D-Bus接口的交互方法,实现高效蓝牙设备管理与GATT服务开发。

weixin_28292761的博客 452

【经验&技巧】如何在ADS中导入示波器的时域波形?

从示波器中导出的时域波形数据,需要按照固定的格式进行修改,并通过Display dataset对话框导入ADS。

一只豌豆象的博客 1575

统计UCOSII每个任务堆栈使用大小、剩余大小、堆栈使用率、优先级、任务名

统计UCOSII任务堆栈使用情况

qq_38636482的博客 2321

IEC104协议学习专栏内容规划

IEC104协议的编程学习

sixtome 1110

UCOSII-任务

本文对UCOSII操作系统的任务部分做了比较详细全面的总结,是UCOSII后面学习的基础,供大家参考,谢谢!

tutu_hu的博客 1615

关于红队方面的学习资料

关于红队方面的学习资料

Sumarua的博客 1085

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

uCosii从任务的建立到运行

μC/OS-Ⅱ从任务的建立到运行 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、任务建立到运行整体流程二、分步功能实现1.μC/OS-Ⅱ初始化2.读入数据总结 前言 最近在学习ucosii实时操作系统,记录下学习过程,以待日后查阅. tips:本文所用ucosii版本为V2.86,硬件平台为STM32. 一、任务建立到运行整体流程 μC/OS-Ⅱ任务从建立到运行的整体流程如下所述: 1. μC/OS-Ⅱ初始化: OSInit(); 2. 创建任务: Create_T

weixin_41451202的博客 1284

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

UCOSII原理与应用----基本概念和任务

1、实时操作系统是什么 实时操作系统:能够使计算机系统在一个规定的时间内及时响应外部请求并及时控制设备和实时任务协调运行的操作系统。 实时系统有两个基本要求:1、实时系统的计算必须产生正确结果,称逻辑或功能正确。2、实时系统的计算必须在规定时间完成。 根据对时间正确的程度,可以分成硬实时系统和软实时系统。 硬实时系统:必须在极严格的时间内完成实时任务。超过截止时间 软实时系统:对计算超时有一定的容忍度,超过允许的时间得到不会完全没有用途,只是这结果可信度有某种程度的降低。 2、任务的基本概念 在设计一个较为

qq_37820135的博客 3465

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

STM32上使用UCOSII--软件定时器和任务延时

stm32 ucosii 软件定时器 任务延时

Zach_z的博客 4145

UCOSII--软件定时器和任务延时

UCOSII--软件定时器和任务延时

qq_38636482的博客 2709

uCOSII学习使用记录

uCOSII学习使用记录 最近学习和使用uCOSII, 在这里做一下笔记 串口中断 中断处理前添加 OS_ENTER_CRITICAL(); OSIntNesting++; OS_EXIT_CRITICAL(); 退出中断后 OSIntExit(); 有人移植了2.86或者2.88版本后,发现跑的时间长了,会出现某些任务跑步了了,是需要设置将中断改为0就可以了,似乎嵌套多了也会出现这样...

weixin_42831633的博客 357

STM32mini使用UCOSII信号量和邮箱实现任务挂起和恢复

实验

阿正的梦工坊 1293

UCOSII-中断和时钟

中断和时钟在UCOSII操作系统中的应用至关重要,本文详细介绍了UCOSII的中断执行过程,并介绍了UCOSII时钟的产生以及时钟节拍中断,对于理解UCOSII系统的运行很有帮助,供大家参考,谢谢!

tutu_hu的博客 3303

UCOSII原理与应用----任务调度

任务调度: UCOSII任务调度思想:“近似地每时每刻让优先级最高的就绪任务处于运行状态”。具体上,采用系统或用户任务调用系统函数及执行中断服务程序结束时来调用调度器,以确定应该运行的任务并运行它。 在多任务系统中,令CPU中止当前正在运行的任务转而去运行另一个任务的工作叫任务切换,而按照某种规则进行任务切换的工作叫任务的调度。 UCOSII中调度器有两种,一是任务级的调度器,二是中断级的调度器。任务调度器主要是完成任务调度,主要工作是寻找最高优先级就绪任务和实现任务切换,由函数OSSched()来实现。中

qq_37820135的博客 1434

STM32------UCOSII的学习笔记

一些对UCOSII的最最最浅度的理解和最最最基本的使用方法的记录:  操作系统分为两大类型: 实时操作系统、分时操作系统。 实时操作系统: 对优先级很敏感。 操作系统的作用: 多任务并发执行。不是同时。 空余的时间拿出来做有用的事情。思考问题的方式变化了。  操作系统: 操作系统内核 + 图形系统 +文件系统 +网络协议栈 操作系统实现多任务的并发执行(调度算法): 依靠操作系统的内核...

qq_41651782的博客 662

UCOSII-消息邮箱与消息队列

本文介绍了消息邮箱和消息队列的原理及使用方法,消息邮箱是消息队列的特殊情况,因此可以看做一起,消息对垒在任务之间进行消息(指针)传递应用方便,供大家参考,谢谢!

tutu_hu的博客 7008

UCOSII进入HardFault_Handler()

最近在使用UCOSII的时候,程序会跑飞,停在HardFault_Handler函数里的死循环while(1)中,百度了一下通常有一下原因: 1.数组越界 2.内存溢出,访问越界 3.堆栈溢出,程序跑飞 4.中断处理错误 经反复核对,依然没有发现问题,后来又百度到UCOSII有的版本确实有bug,本人使用的v2.86版本确实有问题 os_core.c文件中的任务调度函数OS_Sched...

LZPRO的博客 4106
上一篇: apue《UNIX环境高级编程第三版》第二章答案详解
下一篇: 解决绕过android下apk使用usb设备权限查询相应问题,自动获取usb权限
葫芦娃二娃
博客等级 码龄15年 1850粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值