首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
工业控制
» 基于Cortex—M3的自动气象站设计2
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
基于Cortex—M3的自动气象站设计2
发短消息
加为好友
rise_ming
当前离线
UID
864567
帖子
4448
精华
0
积分
2224
阅读权限
70
在线时间
123 小时
注册时间
2011-12-12
最后登录
2014-8-25
金牌会员
UID
864567
1
#
打印
字体大小:
t
T
rise_ming
发表于 2013-8-1 21:57
|
只看该作者
基于Cortex—M3的自动气象站设计2
数据采集
,
气象站
,
最大值
,
测量
,
技术
数据采集各模块的关键技术指标见表1,其中温湿度、气压使用平均算法,风速使用滑动平均算法。
平均算法:测量一分钟,每分钟取样6次,去掉一个最大值和最小值,剩下4个值取算术平均。
滑动平均算法:当采集速率每秒一次(t=1),平均期间T=3s,连续测量120s,代入下面公式计算:
式中
:n个样本值的平均值,
:n-1个样本值的平均值,Yn:第n个样本值,t:采样时间,T:平均期间(s)。
3 软件设计
3.1 基于Cortex—M3的μc/os—II移植
μc/os—II是一种典型的具有可剥夺型内核的基于任务优先级调度的实时操作系统,可同时管理多达64个任务,由于Cortex—M3不支持32位的ARM指令集,而只支持Thumb-2指令集,这种不向后兼容的方式使Cortex—M3之前平台使用的ARM汇编语言程序都不能直接移植到Cort ex—M3上,笔者从μc/os—II和Cortex—M3的内核结构研究着手,对μc/os—II内核中INCLUDES.H、OS_CFG.H、OS_CPU.H、OS_CPU_ C.C、OS_CPU_A.ASM五个与应用程序和处理器相关的文件进行修改,在INCLUDES.H中增加了与STM32处理器相关的外设寄存器定义和内存映射的头文件,在OS_CFG.H中完成对μc/os—II内核构造部分的配置工作,在OS_CPU.H中完成与编译器相关数据类型的定义、任务堆栈数据类型的定义,以及任务堆栈方向的设定工作,在OS_CPU_C.C中根据Cortex—M3内核结构完成系统任务堆栈结构设计,由于在C环境下无法对Cortex—M3的寄存器进行操作,所以需要在OS_CPU_A.ASM汇编环境中完成对临界区函数、上下任务切换函数以及中断服务子程序中的任务切换函数的设计工作,在完成以上修改后还需在c环境下增加系统时钟配置和中断函数为μc/os—II提供一个周期性信号源,在STM32中系统时钟是由SysTick定时器来提供的。
3.2 μc/os—II任务设计
在μc/os—II架构下整体设计中需要建立7个任务,如图2所示,由于统计任务主要作用是计算当前CPU的利用率,需要消耗相当的STM32内部资源,所以为节约系统资源在这里需要把系统配置OS_TASK_STAT_EN设置为0,禁止使用统计任务,空闲任务是必须的,在没有其它任务进入就绪状态时投入运行,当系统开始运行前自动建立,优先级自动配置为最低。由于系统要求在开始多任务调度前必须新建一个任务,所以我们建立了一个开始任务,开始仟务作用就是新建另外5个任务,包括:温湿度采集任务、气压数据采集任务、风速采集任务、数据存储任务、数据发送任务,完成这5个任务建立后开始任务就会自己挂起。完成对任务设计后还需要对任务的优先级进行设置,空闲任务优先级设置为最低,风速采集任务频率最高为1s/次,所以优先级应设置为最高,温湿度和气压采集任务频率相同为10s/次,设置优先级应低于风速采集任务,数据存储和发送任务应该都在前面几个数据采集任务完成后,所以设置优先级应该更低一些,开始任务由于在新建任务后被挂起并不参与任务调度,所以优先级可以设置为次于空闲任务的最低级。
3.3 系统整体调试
在主函数中需要进行初始化工作,主要完成STM32时钟系统和μc/os—II时钟系统配置,初始化操作系统后新建开始任务TaskStart后操作系统开始运行,在系统刚开始进行任务调度时由于只有空闲任务和开始任务参与任务调度,开始任务优先级最高所以执行开始任务,在开始任务中又新建气压测量任务(TaskPre)、温湿度测量任务(TaskTem)、风速测量任务(TaskV)、数据存储任务(TaskFlash)、数据发送任务(TaskSim),完成任务新建后开始任务被挂起进入休眠状态,不再参与任务调度,根据事先设计好的优先级系统总是执行优先级最高的任务,风速测量任务优先级最高,挂起时间一到总能得到处理器的使用权,当测量完毕后任务自动挂起不参与任务调度,类似的情况,温湿度测量、气压测量完成各自测量数据并完成数据处理器后也自动挂起,并把标志为置1表示测量工作完成,数据存储任务和数据发送任务根据判断标志位决定是否进行数据存储和数据发送工作,其主函数和开始任务主要代码如下:
收藏
分享
评分
回复
引用
订阅
TOP
返回列表
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议