基于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的移植及实时环境监測的更多相关文章

  1. STM32W108无线传感器网络节点自组织与移动智能体导航技术

    使用STM32W108无线开发板及节点完毕大规模网络的自组建,网络模型选择树型,网络组建完毕之后,使用基于接收信号强度指示RSSI(ReceivedSignal Strength Indication ...

  2. ucos ii 百度官方介绍

          μC/OS II(Micro-Controller Operating System Two)是一个可以基于ROM运行的.可裁剪的.抢占式.实时多任务内核,具有高度可移植性,特别适合于微处 ...

  3. 嵌入式linux应用程序移植方法总结

    嵌入式linux应用程序移植方法总结 前段时间一直在做openCapwap的移植和调试工作,现在工作已接近尾声,编写本文档对前段工作进行一个总结,分享下openCapwap移植过程中的经验和感悟.江浩 ...

  4. DE1-SOC开发板上搭建NIOS II处理器运行UCOS II

    DE1-SOC开发板上搭建NIOS II处理器运行UCOS II   今天在DE1-SOC的开发板上搭建NIOS II软核运行了UCOS II,整个开发过程比较繁琐,稍微有一步做的不对,就会导致整个过 ...

  5. 基于s5pv210嵌入式系统busybox文件系统移植

    基于s5pv210嵌入式系统busybox文件系统移植 1.下载源码 busybox.net/downloads下载最新版的busybox源码,最新源码为1.21.1 2.解压源码文件 tar xvf ...

  6. ucos ii 46个系统API函数解析

    源: ucos ii 46个系统API函数解析

  7. FreeRTOS 和uCOS II的简单比较

    转载:http://www.viewtool.com/bbs/forum.php?mod=viewthread&tid=114 这是两种RTOS, 现在粗略比较一下. freeRTOS比uCO ...

  8. 1-1. OSS/ALSA 声卡的驱动与配置和 Madplay 嵌入式播放器的移植

    报警子系统 一. OSS/ALSA 声卡的驱动与配置 声卡驱动中传统的OSS构架在02年被收购后即不开源,并且OSS的混音效果不好->因此ALSA构架孕育而生. ALSA(高级音频构架,目前应用 ...

  9. 网络状态监測之 Reachability的使用

    先下载 Reachability开源库地址: (一)git hub: https://github.com/tonymillion/Reachability (二)我自己改动的:http://down ...

随机推荐

  1. OCA读书笔记(4) - 管理数据库实例

    Objectives: •Start and stop the Oracle database and components •Use Oracle Enterprise Manager •Acces ...

  2. 九度OJ 1179 阶乘(模拟)

    题目1179:阶乘 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4526 解决:1315 题目描写叙述: 输入n, 求y1=1!+3!+...m!(m是小于等于n的最大奇数) y2=2! ...

  3. Swift - 使用UIWebView和UIToolbar制作一个浏览器

    使用网页控件(UIWebView)与工具栏控件(UIToolbar),我们可以自制一个小型的浏览器,其功能如下: 1,输入网址,点击“Go”按钮加载网页 2,加载过程中有进度条,同时可以点击停止按钮取 ...

  4. 窗体透明,但窗体上的控件不透明(简单好用)good

    1.在Delphi中,设置窗体的AlphaBlend := true;AlphaBlendValue := 0-255; AlphaBlendValue越小窗体的透明度就越高.这种方法将会使窗体和窗体 ...

  5. ubuntu14.04中virtualbox虚拟机无法启动

    近期升级了ubuntu14.04,还是按之前的方法安装了virtualbox(guest系统仍然使用升级之前的镜像文件),可是在启动guest系统时,总是报错,提演示样例如以下: Kernel dri ...

  6. C#同步SQL Server数据库中的数据--数据库同步工具[同步新数据]

    C#同步SQL Server数据库中的数据 1. 先写个sql处理类: using System; using System.Collections.Generic; using System.Dat ...

  7. 第二十次codeforces竞技结束 #276 Div 2

    真是状况百出的一次CF啊-- 终于还Unrated了,你让半夜打cf 的我们怎样释怀(中途茫茫多的人都退场了)--虽说打得也不好-- 在这里写一下这一场codeforces的解题报告.A-E的 题目及 ...

  8. 非对称加密RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。使用最广泛的是RSA算法

          非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey).公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密:如果用私 ...

  9. Enable OWIN Cross-origin Request

    微软出了一套解决方式能够解决 "同意WebAPI的 CORS 请求" http://www.asp.net/web-api/overview/security/enabling-c ...

  10. 怎样用Google APIs和Google的应用系统进行集成(1)----Google APIs简介

    Google的应用系统提供了非常多的应用,比方 Google广告.Google 任务,Google 日历.Google blogger,Google Plus,Google 地图等等非常的多的应用,请 ...