本帖最后由 fesxp 于 2015-8-15 10:41 编辑
基于STM32W108无线开发板,将ucos-ii v2.86内核移植到其上,并添加用户任务,实现对温湿度、超声波、声音、光敏等传感器的控制及实时数据采集。
14.1 开发环境说明 硬件:STM32W108无线开发板,JLink烧写器,PC机、温湿度传感器、声音传感器、光敏传感器、超声波传感器等。
软件:IAR Embedded Workbench开发软件,SimpleMac Zigbee协议栈,ucos-ii的内核源码。 相关源文件更改
14.3部分对源码包“Micrium-ARM-uCOS-II-Cortex-M3.exe”进行解压之后会得到文件夹“Micrium”,从文件夹“Micrium\Software\EvalBoards\ST\STM3210B-EVAL\IAR\OS-Probe\”目录下拷贝os_cfg.h文件,覆盖工程目录app目录下的os_cfg.h文件即可,不需进行更改,文件内容在此就不列出。
分组port下包含四个文件os_cpu.h、os_cpu_a.asm、os_cpu_c.c和os_dbg.c,下面分别进行相应的更改。 对于文件os_cpu.h将第109行语句“void OS_CPU_PendSVHandler(void);”注释掉,添加语句“voidPendSV_Handler(void);”,然后保存文件。 文件os_cpu_c.c中的部分函数需要进行更改,更改函数如下: [tr] [td=627] INT32U OS_CPU_SysTickClkFreq(){return 6000000;} //新添加函数,CPU时钟频率 //更改方式:将函数OSTaskCreateHook()内容完全注释 #if OS_CPU_HOOKS_EN > 0 void OSTaskCreateHook (OS_TCB *ptcb) { /* #if OS_APP_HOOKS_EN > 0 App_TaskCreateHook(ptcb); #else (void)ptcb; // Prevent compiler warning #endif */ } #endif //更改方式:将函数OSTaskDelHook()内容完全注释 #if OS_CPU_HOOKS_EN > 0 void OSTaskDelHook (OS_TCB *ptcb) { /* #if OS_APP_HOOKS_EN > 0 App_TaskDelHook(ptcb); #else (void)ptcb; //Prevent compiler warning #endif */ } #endif //更改方式:将函数OSTaskIdleHook ()内容完全注释 #if OS_CPU_HOOKS_EN > 0 && OS_VERSION >= 251 void OSTaskIdleHook (void) { /* #if OS_APP_HOOKS_EN > 0 App_TaskIdleHook(); #endif */ } #endif //更改方式:将函数OSTaskStatHook()内容完全注释 #if OS_CPU_HOOKS_EN > 0 void OSTaskStatHook (void) { /* #if OS_APP_HOOKS_EN > 0 App_TaskStatHook(); #endif */ } #endif //更改方式:将函数OSTaskSwHook ()内容完全注释 #if (OS_CPU_HOOKS_EN > 0) && (OS_TASK_SW_HOOK_EN > 0) void OSTaskSwHook (void) { /* #if OS_APP_HOOKS_EN > 0 App_TaskSwHook(); #endif */ } #endif //更改方式:将函数OSTCBInitHook ()内容完全注释 #if OS_CPU_HOOKS_EN > 0 && OS_VERSION > 203 void OSTCBInitHook (OS_TCB *ptcb) { /* #if OS_APP_HOOKS_EN > 0 App_TCBInitHook(ptcb); #else (void)ptcb; //避免编译警告 #endif */ } #endif //更改方式:将函数OSTimeTickHook ()内容完全注释 #if (OS_CPU_HOOKS_EN > 0) && (OS_TIME_TICK_HOOK_EN > 0) void OSTimeTickHook (void) { /* #if OS_APP_HOOKS_EN > 0 App_TimeTickHook(); #endif */ //添加新函数SysTick_Handler(),时钟中断处理函数 /****************************************************************************** 功能描述:时钟中断处理函数 参数:无 返回值:无 ******************************************************************************/ void SysTick_Handler (void) { OS_CPU_SR cpu_sr; OS_ENTER_CRITICAL(); //通知uC/OS-II内核ISR已被启动 OSIntNesting++; OS_EXIT_CRITICAL(); OSTimeTick(); //调用uC/OS-II内核提供的OSTimeTick()函数 OSIntExit(); //通知uC/OS-II内核我们退出ISR } 14.6 实验结果及分析将实验程序进行编译,如果出现错误进行调试更改,最后将程序烧写入STM32W108无线开发板,烧写完成之后,将开发板通过串口线与PC机相连,开始执行,按下S2按键开始创建子任务,串口输出信息如图所示。由图可知当前温湿度传感器检测的温度为29C,湿度为33RH,超声波传感器检测的距离为35cm,对光敏传感器和声音传感器分别操作,可以看到输出结果是有变化的,由结果可知创建的4个子任务都能正常执行,证明了实验结果的正确性,同样说明ucos-ii移植实验是成功的。
|