热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

(uC/OSII学习笔记)uC/OSII在kinetisK60上移植与任务建立

uCOS-II在kinetis上的移植代码,可以在官网上下到。复制到kinetis的工程中即可。建立第一个任务,以确定系统是否移植成功OS_STK*Fi

uC/OS-II在kinetis上的移植代码,可以在官网上下到。复制到kinetis的工程中即可。

 

 

建立第一个任务,以确定系统是否移植成功

 

OS_STK *FirstTask_Add;
void main()
{OSInit();
//初始化uC/OS
FirstTask_Add = (OS_STK *)malloc(sizeof(OS_STK));OSTaskCreate(FirstTask_LED,(void *)0,FirstTask_Add,4); //创建任务
OSStart(); //启动多任务管理
}

OS_STK为任务堆栈类型 占四个字节的空间

 

uC/OS-II每个任务都有唯一的优先级。可以建立0~63优先级的任务。通常保留4个最高优先级以及4个最低优先级。系统初始化时会自动产生两个任务:一个是空闲任务,它的优先级最低,该任务仅给一个整形变量做累加运算;另一个是统计任务,它的优先级为次低,该任务负责统计当前cpu的利用率。

 OSTaskCreate 函数源代码

INT8U OSTaskCreate (void (*task)(void *p_arg),void *p_arg,OS_STK *ptos,INT8U prio)
{OS_STK
*psp;INT8U err;
#if OS_CRITICAL_METHOD == 3u /* Allocate storage for CPU status register */OS_CPU_SR cpu_sr = 0u;
#endif#ifdef OS_SAFETY_CRITICAL_IEC61508if (OSSafetyCriticalStartFlag == OS_TRUE){OS_SAFETY_CRITICAL_EXCEPTION();return (OS_ERR_ILLEGAL_CREATE_RUN_TIME);}
#endif#if OS_ARG_CHK_EN > 0uif (prio > OS_LOWEST_PRIO) /* Make sure priority is within allowable range */{return (OS_ERR_PRIO_INVALID);}
#endifOS_ENTER_CRITICAL();if (OSIntNesting > 0u) /* Make sure we don't create the task from within an ISR */{OS_EXIT_CRITICAL();return (OS_ERR_TASK_CREATE_ISR);}if (OSTCBPrioTbl[prio] == (OS_TCB *)0) /* Make sure task doesn't already exist at this priority */{OSTCBPrioTbl[prio] = OS_TCB_RESERVED;/* Reserve the priority to prevent others from doing ... *//* ... the same thing until task is created. */OS_EXIT_CRITICAL();psp = OSTaskStkInit(task, p_arg, ptos, 0u); /* Initialize the task's stack */err = OS_TCBInit(prio, psp, (OS_STK *)0, 0u, 0u, (void *)0, 0u);if (err == OS_ERR_NONE){if (OSRunning == OS_TRUE) /* Find highest priority task if multitasking has started */{OS_Sched();}}else{OS_ENTER_CRITICAL();OSTCBPrioTbl[prio] = (OS_TCB *)0;/* Make this priority available to others */OS_EXIT_CRITICAL();}return (err);}OS_EXIT_CRITICAL();return (OS_ERR_PRIO_EXIST);
}

 

任务函数

void FirstTask_LED(void *pdata)
{U8 aa
= 1;pdata = pdata; init_LED();while(1){Delay(300);LED2(aa);aa = !aa;}
}

FirstTask_LED任务,使LED灯闪烁(延迟300毫秒)。

 

亦可以使用OSTaskCreateExt建立任务。

OSTaskCreateExt(Task_LED1,(void *)0,&Task_Stk[STARTUP_TASK_STK_SIZE-1],5,5,&Task_Stk[0],128,(void *)0,OS_TASK_OPT_STK_CHK || OS_TASK_OPT_STK_CLR);

 

OSTaskCreateExt 建立任务,需要栈底地址、堆栈容量(用于堆栈检验)、ID及OPT(允许检验、是否清零、允许浮点运算)参数。
OSTaskStkChk(INT8U prio,OS_STK_DATA *pdata)函数可以检验堆栈的实际使用空间。
OS_STK_DATA为结构体变量。存储任务堆栈的使用空间。
通过Jlink调试,观摩任务堆栈实际使用情况。

转:https://www.cnblogs.com/hebaichuanyeah/p/3233465.html



推荐阅读
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • EPPlus绘制刻度线的方法及示例代码
    本文介绍了使用EPPlus绘制刻度线的方法,并提供了示例代码。通过ExcelPackage类和List对象,可以实现在Excel中绘制刻度线的功能。具体的方法和示例代码在文章中进行了详细的介绍和演示。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有