网站空间什么意思,做承兑 汇票一般会用哪些网站,泰安百度推广代理,商标注册类别45类明细1. 平台介绍
本文档为基于uCOSII操作系统做开发的人员描述了一些uCOSII操作系统的基本特征。
1.1 结构图 图 1 整体结构图
2. 基本特征
2.1 uCOSII基本特征
uCOSII操作系统目前支持如下的基本特征#xff1a;
1. 提供抢占式任务调度服务
2. 提供任务间同步与通信服务…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 uCOSII的tick配置 如无特殊要求性能功能不受影响情况下配置1 tick/ms具体可根据实际应用的性能功能要求和HCLK及Timer0的时钟情况来调整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_entry和cpu_exc_entry的函数实体内容。在cpu_int_entry和cpu_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_TIMER为Timer在芯片内核中的中断异常号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管理,用户不需要修改