ucos ii 文件分析

1. 平台介绍

本文档为基于uCOSII操作系统做开发的人员描述了一些uCOSII操作系统的基本特征。 

1.1 结构图

 

1  整体结构图

2. 基本特征

2.1 uCOSII基本特征

uCOSII操作系统目前支持如下的基本特征:

1. 提供抢占式任务调度服务

2. 提供任务间同步与通信服务(如邮箱、消息队列、信号量、内存管理等)

3. 提供任务管理服务

4. 中断管理支持嵌套(中断嵌套层数最多255

2.2 uCOSII存储配置

当前uCOSII的配置如下:

配置项

配置值

OS_MAX_EVENTS

10

OS_MAX_FLAGS

5

OS_MAX_MEM_PART

5

OS_MAX_QS

4

OS_MAX_TASKS

20

OS_TASK_TMR_STK_SIZE

128

OS_TASK_STAT_STK_SIZE

128

OS_TASK_IDLE_STK_SIZE

128

在上述配置情况下,在metaWare IDE优化选项为-O1的情况下,代码大小为19K左右,数据大小为8K左右。

2.3 uCOSIItick配置

         如无特殊要求,性能功能不受影响情况下,配置1 tick/ms,具体可根据实际应用的性能功能要求和HCLKTimer0的时钟情况来调整bsp_os.c中全局变量unsigned int cyc = 0xXXXXX; 的值来改变Tick的频率。

3. 任务的建立       

1. 任务栈的建立

每个任务都需要自己的栈空间,因此在建立任务之前,先给任务开辟一块RAM作为该任务的栈空间。示例如下:

OS_STK  task1_stk[TASK_STK_SIZE];

2. 任务实体的编写

编写任务函数及实体,一个任务通常是一个无限的循环。示例如下:

static void task1(void * par)

{

#if OS_CRITICAL_METHOD == 3u        

      OS_CPU_SR  cpu_sr = 0u;

#endif

unsigned int cnt = (unsigned int) par;

while(1) {

OSTimeDlyHMSM(0, 0, 0, 3000);

OSTaskResume(TASK2_PRI);

}

}

3. 将任务加入任务管理行列

使用OSTaskCreate接口函数来将任务加入任务管理行列,需要注意,此处要提供任务函数实体的入口地址,任务的栈空间的TOP地址及任务优先级。

初始任务的创建OSTaskCreate必须在OSInit接口函数之后和OSStart接口函数之前,其他任务的创建可在任务实体中调用OSTaskCreate接口函数来建立新任务。示例如下:

OSInit();

os_err = OSTaskCreate(task1, (void *)1, p_task1_stk, TASK1_PRI);

os_err = OSTaskCreate(task2, (void *)2, p_task2_stk, TASK2_PRI);

OSTaskSuspend(TASK2_PRI);

OSStart();

或者如下所示:

static void task1(void * par)

{

#if OS_CRITICAL_METHOD == 3u        

      OS_CPU_SR  cpu_sr = 0u;

#endif

unsigned int cnt = (unsigned int) par;

os_err = OSTaskCreate(task3, (void *)1, p_task3_stk, TASK3_PRI);

os_err = OSTaskCreate(task2, (void *)2, p_task2_stk, TASK2_PRI);

while(1) {

OSTimeDlyHMSM(0, 0, 0, 3000);

OSTaskResume(TASK2_PRI);

}

}

4. 中断与异常处理函数的建立

4.1 中断与异常的处理过程

       系统将所有的中断入口统一为函数cpu_int_entry的入口地址,将所有的异常入口统一为函数cpu_exc_entry的入口地址。用户无需修改os_cpu_a.s文件中cpu_int_entrycpu_exc_entry的函数实体内容。在cpu_int_entrycpu_exc_entry中,系统做完相关处理后,会根据当前中断或异常优先级来决定跳转到中断异常处理函数列表_kernel_exc_tbl的相应入口去执行中断或异常处理函数。而中断异常处理函数列表_kernel_exc_tbl中的具体的函数入口则需要用户建立。

4.2 用户的中断与异常处理函数的建立

1. 中断与异常处理函数实体的编写

如下所示:

static void OSTickISR( void )

{

/* clear timer interrupt */

write_aux_reg(ARC_REG_TIMER0_CTRL, TIMER_CTRL_IE | TIMER_CTRL_NH);

OSTimeTick();

}

2. 将函数入口地址加入中断异常处理函数列表_kernel_exc_tbl

初始化设备后,将中断或异常处理函数的入口加入中断异常处理函数列表_kernel_exc_tbl中,如下所示:

arc_install_exc(INHNO_TIMER, (EXC_HANDLER)OSTickISR);

其中INHNO_TIMERTimer在芯片内核中的中断异常号,OSTickISR则为Timer中断对应的中断处理函数入口地址。

然后使能中断即可。

5. 主要文件说明  

uCOSII内核又可区分为两块:

1. 内核跟移植相关的部分,包括对中断和异常的处理、任务切换及临界段等

文件名

文件说明

os_cpu_a.s

uCOS内核中需要用户参与修改的部分,包括任务切换代码、中断处理代码、异常处理代码等(目前已移植完毕,用户不需要修改)

os_cpu_c.c 

uCOS内核中,提供给用户编写用户的钩子程序的文件

os_cpu.h

与移植相关的函数声明

os_cfg_r.h

与移植相关的操作系统资源配置

2.其他的uc/os-ii文件

uC/OS-II内核与体系结构无关的服务代码,不需要做任何修改的部分

文件名

文件说明

os_dbg.c

uCOS内核中,提供给用户用于配置调试的文件

os_core.c

uCOS内核的功能函数,用户不需要修改

os_flag.c

uCOS提供的时间标志组管理,用户不需要修改

os_mbox.c

uCOS提供的消息邮箱管理,用户不需要修改

os_mem.c

uCOS提供的内存管理,用户不需要修改

os_mutex.c

uCOS提供的互斥信号量管理,用户不需要修改

os_q.c

uCOS提供的队列管理,用户不需要修改

os_sem.c

uCOS提供的信号量管理,用户不需要修改

os_Task.c

uCOS提供的任务管理,用户不需要修改

os_time.c

uCOS提供的时间管理,用户不需要修改

os_tmr.c

uCOS提供的软Timer管理,用户不需要修改

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值