STM32W108无线传感器网络嵌入式uCOS-II的移植及实时环境监測
基于STM32W108无线开发板,将ucos-ii v2.86内核移植到其上,并加入用户任务。实现对温湿度、超声波、声音、光敏等传感器的控制及实时数据採集。
14.1开发环境说明
硬件:STM32W108无线开发板,JLink烧写器。PC机、温湿度传感器、声音传感器、光敏传感器、超声波传感器等。
软件:IAR Embedded Workbench开发软件,SimpleMac Zigbee协议栈,ucos-ii的内核源代码。
实验硬件电路传感器接口与第13章中使用的传感器接口同样,具体信息參考13.3节硬件电路设计部分,在此不再反复说明。
相关源文件更改
文件加入完毕之后,须要对部分文件进行更改。首先更改app分组里面的app_cfg.h和os_cfg.h文件。app_cfg.h为用户自己定义參数。如任务堆栈大小,任务的优先级等參数,文件内容例如以下:
|
#ifndef _APP_CFG_H_ #define _APP_CFG_H_ //任务优先级 #define STARTUP_TASK_PRIO 4 #define HUMIDITY_PRIO 6 #define SOUND_PRIO 7 #define PRESS_PRIO 8 #define DISTANCE_PRIO 9 //任务堆栈大小 #define STARTUP_TASK_STK_SIZE 80 #define TASK_STK_SIZE 128 #endif |
14.3部分对源代码包“Micrium-ARM-uCOS-II-Cortex-M3.exe”进行解压之后会得到文件夹“Micrium”,从文件夹“Micrium\Software\EvalBoards\ST\STM3210B-EVAL\IAR\OS-Probe\”文件夹下拷贝os_cfg.h文件。覆盖project文件夹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_a.asm中为汇编代码,首先将第41行代码“EXPORT OS_CPU_PendSVHandler”替换为“EXPORTPendSV_Handler”,即将函数PendSV_Handler定义为外部可见。然后将第204行代码“OS_CPU_PendSVHandler”替换为“PendSV_Handler”,完毕函数PendSV_Handler的定义,删除函数OS_CPU_PendSVHandler。
文件os_cpu_a.asm更改完毕之后,须要对协议栈文件夹“hal\micro\cortexm3”文件夹下的context-switch.s79文件进行更改,由于文件os_cpu_a.asm中对函数PendSV_Handler进行了定义,而文件context-switch.s79中已有此函数定义,须要将context-switch.s79文件里的函数凝视掉。打开文件context-switch.s79,定位到文件的91行,对函数进行凝视。内容例如以下:
|
; __CODE__ ; __THUMB__ ; __EXPORT__ PendSV_Handler ; __EXPORT__ halPendSvIsr ;PendSV_Handler: ;halPendSvIsr: ; LDR R0, =halPendSvSaveContext ; LDRB R0, [R0] ; CBZ R0, contextRestore ;contextSave: ; MRS R0, MSP ; SUB R0, R0, #0x20 ; MSR MSP, R0 ; STM R0, {R4-R11} ; LDR R1, =savedMSP ; STR R0, [R1] ; WFI ;contextRestore: ; LDR R0, =savedMSP ; LDR R0, [R0] ; LDM R0, {R4-R11} ; ADD R0, R0, #0x20 ; MSR MSP, R0 ; BX LR |
文件os_cpu_c.c中的部分函数须要进行更改。更改函数例如以下:
|
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 } |
本文出自《STM32W108嵌入式无线传感器网络》邱铁,夏锋,周玉编著.清华大学出版社,2014年5月
STM32W108无线传感器网络嵌入式uCOS-II的移植及实时环境监測的更多相关文章
- STM32W108无线传感器网络节点自组织与移动智能体导航技术
使用STM32W108无线开发板及节点完毕大规模网络的自组建,网络模型选择树型,网络组建完毕之后,使用基于接收信号强度指示RSSI(ReceivedSignal Strength Indication ...
- ucos ii 百度官方介绍
μC/OS II(Micro-Controller Operating System Two)是一个可以基于ROM运行的.可裁剪的.抢占式.实时多任务内核,具有高度可移植性,特别适合于微处 ...
- 嵌入式linux应用程序移植方法总结
嵌入式linux应用程序移植方法总结 前段时间一直在做openCapwap的移植和调试工作,现在工作已接近尾声,编写本文档对前段工作进行一个总结,分享下openCapwap移植过程中的经验和感悟.江浩 ...
- DE1-SOC开发板上搭建NIOS II处理器运行UCOS II
DE1-SOC开发板上搭建NIOS II处理器运行UCOS II 今天在DE1-SOC的开发板上搭建NIOS II软核运行了UCOS II,整个开发过程比较繁琐,稍微有一步做的不对,就会导致整个过 ...
- 基于s5pv210嵌入式系统busybox文件系统移植
基于s5pv210嵌入式系统busybox文件系统移植 1.下载源码 busybox.net/downloads下载最新版的busybox源码,最新源码为1.21.1 2.解压源码文件 tar xvf ...
- ucos ii 46个系统API函数解析
源: ucos ii 46个系统API函数解析
- FreeRTOS 和uCOS II的简单比较
转载:http://www.viewtool.com/bbs/forum.php?mod=viewthread&tid=114 这是两种RTOS, 现在粗略比较一下. freeRTOS比uCO ...
- 1-1. OSS/ALSA 声卡的驱动与配置和 Madplay 嵌入式播放器的移植
报警子系统 一. OSS/ALSA 声卡的驱动与配置 声卡驱动中传统的OSS构架在02年被收购后即不开源,并且OSS的混音效果不好->因此ALSA构架孕育而生. ALSA(高级音频构架,目前应用 ...
- 网络状态监測之 Reachability的使用
先下载 Reachability开源库地址: (一)git hub: https://github.com/tonymillion/Reachability (二)我自己改动的:http://down ...
随机推荐
- NET Core RC2 and .NET Core SDK Preview
NET Core RC2 and .NET Core SDK Preview 先看一下 .NET Core(包含 ASP.NET Core)的路线图: Beta6: 2015年7月27日 Beta7: ...
- 怎么用CIFilter给图片加上各种各样的滤镜_1
近期在做对图像处理的app,而要对图像进行处理,CoreImage是离不开的框架. 上网Google了一下,大部分的博客都是仅仅讲了怎么给图像加上怀旧(CISepiaTone).模糊(CIBloom) ...
- Jetty:配置安全
用${jetty.home}和${jetty.base}配置安全 Jetty 9.1中: 1)${jetty.home}是jetty公布(二进制)的文件夹路径: 2)${jetty.base}是用 ...
- [UVALive 6663 Count the Regions] (dfs + 离散化)
链接:https://icpcarchive.ecs.baylor.edu/index.php? option=com_onlinejudge&Itemid=8&page=show_p ...
- Dom生成Xml和解析Xml
xml这样的文件格式在非常多时候都是非常适合我们用来存取数据的,所以利用程序来生成xml文件和解析xml文件就显得比較重要了.在dom中是把每个元素都看做是一个节点Node的,全部页面上的属性.元素等 ...
- VB.NET<机房收费系统个人重构版>你都学会了什么(之五)
接着上篇我们说的配置文件,今天我们来说一下接口. 1.UML图 2.三层架构 3.Sqlhelper 4.配置文件 5.接口 6.设计模式 什么是接口呢?我们可以将接口理解为用于沟通的中介的抽象化.可 ...
- POJ 3189 Steady Cow Assignment【网络流】
题意:每个奶牛对所有的牛棚有个排名(根据喜欢程度排的),每个牛棚能够入住的牛的数量有个上限,重新给牛分配牛棚,使牛棚在牛心中的排名差(所有牛中最大排名和最小排名之差)最小. 牛棚个数最多为20,那么直 ...
- HDU 5107 线段树扫描线
给出N个点(x,y).每一个点有一个高度h 给出M次询问.问在(x,y)范围内第k小的高度是多少,没有输出-1 (k<=10) 线段树扫描线 首先离散化Y坐标,以Y坐标建立线段树 对全部的点和询 ...
- poj3678(two-sat)
传送门:Katu Puzzl 题意:n个点,点的取值可以是0或者1.m条边,有权值,有运算方式(并,或,异或),要求和这条边相连的两个点经过边上的运算后的结果是边的权值.问你有没有可能把每个点赋值满足 ...
- [LeetCode]Pascal's Triangle II
题目:给定一个行索引index,返回帕斯卡三角形第index层的三角形 算法:生成index层帕斯卡三角形,并返回第index层三角形 public class Solution { public L ...