关闭
关闭
首页 > 嵌入式软件 > Uc/os II

先把入口函数main给贴出来,就从这里开始,来自文件main.c

本文引用地址: http://embed.21ic.com/software/ucos/201712/49630.html

/*******************************************************************************

* Function Name : main

* Description : 主函数,对系统以及硬件初始化,建立主函数并开启系统

* Input : None

* Output : None

* Return : None

*******************************************************************************/

int main(void)

{

CPU_IntDis(); // 禁止CPU中断 连接到汇编

OSInit(); // uCOS系统初始化

BSP_Init(); // 硬件初始化

OSTaskCreate //建立主任务, 优先级最高 建立这个任务另外一个用途是为了以后使用统计任务

(

(void (*) (void *)) App_TaskStart, //指向任务代码的指针

(void *) 0, //任务开始执行时,传递给任务的参数的指针

(OS_STK *) &App_TaskStartStk[APP_TASK_START_STK_SIZE - 1], //分配给任务的堆栈的栈顶指针,从 (INT8U) APP_TASK_START_PRIO //分配给任务的优先级

);

OSTimeSet(0);

OSStart();

return(0);

}

在开始 uC/OS_II 的调度之前,我们需要调用函数OSInit(),他负责建立任务控制块链表,就绪任务表等数据结构,然后初始化全局变量。然后把需要用的外部设备进行初始化,主要是时钟初始化,中断嵌套初始化,端口初始化,调用函数BSP_Init(),uC/OS_II规定在任务调度开始前至少有一个任务已经建立,所以我们建立一个任务APP_TaskStart,并且给这个任务分配优先级以及堆栈等资源这是必须的啦,然后我们用OSTimeSet(0)函数初始化系统的时钟节拍数后,就调用OSStart()函数开始任务调度,任务就会从所有建立的任务里最高优先级开始执行。

大家还记得刚才建立了一个APP_TaskStart任务,在系统开始任务调度的时候,系统里除了默认的优先级最低的空闲任务外只有这一个任务被注册了,自然就会运行这个任务,我们先来看下他的相关源代码来自文件task.c:

/*******************************************************************************

* Function Name : App_TaskStart

* Description : 主任务

* Input : None

* Output : None

* Return : None

*******************************************************************************/

void App_TaskStart(void* p_arg)

{

(void) p_arg;

OS_CPU_SysTickInit(); // 初始化系统心跳

#if (OS_TASK_STAT_EN > 0)

OSStatInit(); // 统计任务初始化函数

#endif

App_TaskCreate(); // 创建新的用户任务

while(1)

{

LED4_HIGH;

OSTimeDlyHMSM(0,0,1,0);

LED4_LOW;

OSTimeDlyHMSM(0,0,1,0);

}

}

/*******************************************************************************

* Function Name : App_TaskCreate

* Description : 建立用户任务

* Input : None

* Output : None

* Return : None

*******************************************************************************/

void App_TaskCreate(void)

{

//===================================================================// 测试任务1

OSTaskCreateExt(

Task_Test1, // 指向任务代码的指针,也就是任务函数名

(void *)0, // 任务开始执行时传递给任务的参数

(OS_STK *)&Task_Test1Stk[Task_Test1_STK_SIZE-1],//分配给任务堆栈的栈顶指针,自顶向下

Task_Test1_PRIO, // 分配给任务的优先级

Task_Test1_PRIO, // 预备给以后版本的标识符,现在同任务优先级

(OS_STK *)&Task_Test1Stk[0], // 指向任务堆栈的栈底指针,用于堆栈的检验

Task_Test1_STK_SIZE, // 指定堆栈的容量,用于堆栈检验

(void *)0, // 指向用户附加数据域的指针,用来扩展任务控制块

OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR // 任务选项:使能堆栈检测 和 创建任务时清空堆栈

);

//===================================================================// 测试任务2

OSTaskCreateExt(

Task_Test2,

(void *)0,

(OS_STK *)&Task_Test2Stk[Task_Test2_STK_SIZE-1],

Task_Test2_PRIO,

Task_Test2_PRIO,

(OS_STK *)&Task_Test2Stk[0],

Task_Test2_STK_SIZE,

(void *)0,

OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR

);

//===================================================================// 测试任务3

OSTaskCreateExt(

Task_Test3,

(void *)0,

(OS_STK *)&Task_Test3Stk[Task_Test3_STK_SIZE-1],

Task_Test3_PRIO,

Task_Test3_PRIO,

(OS_STK *)&Task_Test3Stk[0],

Task_Test3_STK_SIZE,

(void *)0,

OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR

);

}

同时给出任务的优先级及堆栈大小等信息来自文件app_cfg.h

//任务优先级

#define APP_TASK_START_PRIO 10

#define Task_Test1_PRIO 7

#define Task_Test2_PRIO 8

#define Task_Test3_PRIO 9

//任务堆栈大小

#define APP_TASK_START_STK_SIZE 64

#define Task_Test1_STK_SIZE 128

#define Task_Test2_STK_SIZE 128

#define Task_Test3_STK_SIZE 128

可以看到,任务APP_TaskStart的优先级最低,所以在这个任务里创建其他的任务的时候他就会被更高优先级的任务把CPU的占有权抢去,在uC/OS_II里每建立一个任务后都会产生一次任务的调度,如果这个建立的任务优先级更高,则系统就会去执行这个刚创立的任务,如果低就只能等着了。所以在建立Task_Test1任务后,就会跳转执行此任务,现在我们来看下这三个测试任务的源代码来自文件app.c

换一批

延伸阅读

[新鲜事] 苹果指纹辨识Touch ID速度好快 谜底原来在这

苹果指纹辨识Touch ID速度好快 谜底原来在这

苹果(Apple)iPhone6s指纹辨识Touch ID反应速度比之前机种要快,国外媒体把谜底解开了。市场预期今年第3季推出的iPhone 7,也将具备更先进的指纹辨识功能。国外网站patentlyapple和中国大陆报导,美国专利商标局......

关键字:指纹识别 Touch ID

[新鲜事] 苹果成功申请新专利:声波成像取代指纹识别

苹果成功申请新专利:声波成像取代指纹识别

美国专利和商标局(USPTO)本周四通过了一项苹果在2016年8月申请的“声波成像系统架构”专利,这份专利描述了一种使用屏幕下声波换能器矩阵替代 Touch ID 指纹识别传感器的技术。有传言称苹果今年发布的 OLED iPhone 8 将......

关键字:苹果 声波 指纹 Touch ID

[新鲜事] 外媒:中国三大浏览器数据存隐患 用户被出卖

外媒:中国三大浏览器数据存隐患 用户被出卖

中国前三大网络浏览器的数据收集和传输存在安全隐患,使得数亿用户的个人信息易于被非法获取。 ......

关键字:浏览器 UC QQ 百度

[真心话] “废寝忘食”:自学成才的工业机器人

“废寝忘食”:自学成才的工业机器人

发那科公司(Fanuc)是世界著名的工业机器人制造商,该公司的产品在全世界为我们组装着iPhone和汽车。现在,它们与英伟达达成了合作,发那科将把后者的图形处理器(GPU)带入自家的机器人中。其实2015年发那科就开始向人......

关键字:机器人 Fanuc

[新鲜事] 传OLED版iPhone使用新3D Touch 可价格又要高20%

传OLED版iPhone使用新3D Touch 可价格又要高20%

还在抱怨iPhone的3D Touch技术不好吗?近日,凯基证券分析师郭明池称,苹果或将在下一代OLED版本的iPhone中使用全新的3D Touch模块技术。......

关键字:OLED 3D Touch iPhone

[新鲜事] 想要开发支持Touch Bar的软件,你可以试试Electron

想要开发支持Touch Bar的软件,你可以试试Electron

距离苹果推出带有Touch Bar的MacBook Pro已经有一段时间了,除了那些像 Adobe、Google和Microsoft大公司在开发适用于Touch Bar的应用之外,其实还有很多独立的开发商也在做同样的事情。......

关键字:Touch Bar Electron Github

[趣科技] 近距离“观摩”3D Touch传感器

近距离“观摩”3D Touch传感器

苹果发布的iPhone 6S中,最独特的就是其支持3D Touch功能,作为苹果最引以为豪的功能,3D Touch软硬件结合的相当完善。作为iPhone 6s的一大卖点,很多用户都喜欢上了这种“快捷键”功能。另外,它......

关键字:苹果 3D Touch传感器

[新鲜事] 售价6900元起!iPhone 8全新设计:引入Touch Bar

售价6900元起!iPhone 8全新设计:引入Touch Bar

如果你等待新iPhone,那么iPhone 8无疑是最值得入手的,全新的外形设计,会让它带来更惊艳的效果。......

关键字:iPhone 8 Touch Bar

[真心话] 未来iPhone防盗有奇招:收集小偷指纹信息

未来iPhone防盗有奇招:收集小偷指纹信息

包括iPhone在内的一系列苹果产品一直都是“梁上君子”的重点目标,所以苹果最近几年也一直都在加强iPhone的防盗功能。而今一项新专利的曝光,更是让iPhone的防盗性上升到一个新的高度。美国专利商标局本周......

关键字:iPhone Touch ID
条评论

我 要 评 论

网友评论

大家都爱看

  • 华为的优势,就是自家的各种自研芯片

    CPU即中央处理器,是一块超大规模的集成电路,是一台计算机的运算核心和控制核心。它的功能主要是解释计算机指令以及处理计算机软件中的数据。

    2017-08-16
  • 你不知道Ryzen芯片有多火?来看看AMD的股票吧

    据外媒报道,美银美林认为,AMD最新的Ryzen芯片可能会引发一波销售浪潮,进而推动该股继续上涨。它认为AMD股票还有40%以上的上涨空间。

    2017-08-16
  • 国产芯片:厚积薄发,强势崛起

    关于国产芯片,是近几年才有崛起的势头,可是在几年之前,国产芯片还处于“沉睡”的状态,尤其是手机芯片,几乎大部分都依赖进口,而且国外的市场几乎被高通和联发科所垄断,也就展讯还在市场边…

    2017-08-16
  • 为了数据安全 大疆无人机增加隐私飞行功能

    大疆周一表示,在美国陆军因为“网络缺陷”而要求其成员停用大疆无人机后,这家中国无人机制造商将加强无人机的数据安全性。 大疆政策和法务副总裁布伦丹&middot…

    2017-08-15
  • Intel代工 展讯发布14nm SC9853I手机SoC

    SC9853I采用的Intel的14nm FinFET制程,架构为8核64位Airmont架构,主频1.8GHz,GPU为Mali-T820 MP2,号称面向799~1299元档次的手机。…

    2017-08-15