CN114168365A - 一种基于stm32f450处理器的实时数据录取方法 - Google Patents
一种基于stm32f450处理器的实时数据录取方法 Download PDFInfo
- Publication number
- CN114168365A CN114168365A CN202111485083.4A CN202111485083A CN114168365A CN 114168365 A CN114168365 A CN 114168365A CN 202111485083 A CN202111485083 A CN 202111485083A CN 114168365 A CN114168365 A CN 114168365A
- Authority
- CN
- China
- Prior art keywords
- message
- data
- field
- message queue
- task
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5038—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mobile Radio Communication Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种基于stm32f450处理器的实时数据录取方法,通过构建数据接收任务;构建消息队列;构建存储管理任务的自守时功能;构建存储管理任务;构建实时数据的录取流程,利用处理器自带的高速串口从导航解算单元接收原始测量信息和各种辅助信息,将其实时存储到板载SD卡存储器中。同时软件中使用了开源的FreeRTOS操作系统进行多任务调度和临界资源管理。
Description
技术领域
本发明属于嵌入式计算机应用软件技术领域,尤其是一种基于stm32f450处理器的实时数据录取方法。
背景技术
惯性导航是依据牛顿惯性原理,利用惯性元件(加速度计)来测量运载体本身的加速度,经过积分和运算得到速度和位置,从而达到对运载体导航定位的目的。
但是惯导设备安装于水下载具,试验过程全程在水下进行,无法通过外接显控设备实时观测试验数据和分析试验问题,因而提出了存储相关试验信息进行事后仿真和问题追溯的用户需求。由于水下载具对惯导设备的尺寸、功耗、噪音等均有限制,现有技术方案已不满足项目需求。
发明内容
本发明的目的在于克服现有技术的不足,提出一种基于stm32f450处理器的实时数据录取方法,利用处理器自带的高速串口从导航解算单元接收原始测量信息和各种辅助信息,将其实时存储到板载SD卡存储器中。
本发明解决其技术问题是采取以下技术方案实现的:
一种基于stm32f450处理器的实时数据录取方法,包括以下步骤:
步骤1、构建数据接收任务;
步骤2、构建消息队列;
步骤3、构建存储管理任务的自守时功能;
步骤4、构建存储管理任务;
步骤5、设置任务调度和临界资源管理,根据步骤1至步骤4进行实时数据录取。
而且,所述步骤1的具体实现方法为:数据接收任务的串口接收采用双缓冲DMA机制,并且每个运行周期查询DMA传输完成标志,若传输完成,则清除传输完成标志,切换DMA至空闲缓冲区,同时将当前缓冲区中的数据读出,经过数据解析后,将符合要求的报文写入消息队列;若传输未完成,则中止当前数据传输,切换DMA至空闲缓冲区后再重新使能DMA传输,同时将当前缓冲区中的数据读出,经过数据解析后,将符合要求的报文写入消息队列。
而且,所述步骤2包括以下步骤:
步骤2.1、构建信息队列结构;
定义:MSQ的结构,使用Uint8type用于区分不同的消息,使用Uint8 buf[BUFSIZE][DATA_LEN]表示环形缓冲区,使用Uint64pWrite表示写入报文计数,使用Uint64pRead表示读取报文计数;
其中DATA_LEN为数据报文包含的字节数,BUFSIZE为缓冲区中存储的最大报文数,同时需要为每种报文创建一个消息队列;pWrite和pRead对BUFSIZE求余后,作为环形缓冲区的读写指针,buf[pWrite%BUFSIZE]为可写入的空闲报文缓冲区首地址;buf[pRead%BUFSIZE]为待读取的报文缓冲区首地址;
步骤2.2、根据步骤2.1构建的信息队列结构,构建消息队列写操作;
初始状态,消息队列为空,pWrite和pRead均初始化为0,每个运行周期执行以下步骤:
步骤2.2.1、检查当前周期是否收到串口数据报文,若有进行步骤2.2.2,否则进行步骤2.2.4;
步骤2.2.2、检查(pWrite-pRead)是否小于BUFSIZE,小于则进行步骤2.2.3,否则进行步骤2.2.4;
步骤2.2.3、将当前接收到的串口报文写入缓冲区,pWrite加1;
步骤2.2.4、结束;
步骤2.3、根据步骤2.1构建的信息队列结构,构建消息队列读操作;
初始状态,消息队列为空,pWrite和pRead均初始化为0,每个运行周期执行以下步骤:
步骤2.3.1、检查(pWrite-pRead)是否大于0,大于0转入2.3.2,否则转入2.3.3;
步骤2.3.2、从消息队列读取一帧报文,pRead加1,返回2.3.1;
步骤2.3.3、结束。
而且,所述步骤3包括以下步骤:
步骤3.1、构建DATETIME数据结构;Uint8valid_flag为有效标志;Uint16year为年;Uint16month为月;Uint16day为日;Uint16hour为时;Uint16minute为分;Uint16second为秒;Uint16dot_sec为点秒,Uint64counter为0.1ms计数值;
其中,dot_sec为UTC时间中小数点之后的部分,取值范围[0,9999];
Counter=hour*36000000+minute*600000+second*10000+dotsec
步骤3.2、构建日期时间更新;
步骤3.2.1、利用stm32f450的通用定时器Timer3进行时间计数,计数周期0.1ms;
步骤3.2.2、利用1000Hz系统中断,每隔1ms将Timer3的计数增量累加至counter中;
步骤3.2.3、每隔10ms,利用Counter=hour*36000000+minute*600000+second*10000+dotsec反算更新DATETIME结构体中的hour字段、minute字段、second字段、dot_sec字段,当counter计数值超过24小时后,则依次对day字段、month字段、year字段进行更新;
步骤3.3、日期时间校正;
步骤3.3.1、开机后valid_flag初始化为无效状态;
步骤3.3.2、当通过串口接收到UTC时间信息后,利用UTC时间依次校正year字段、month字段、day字段、hour字段、minute字段、second字段、dot_sec字段,同时利用Counter
=hour*36000000+minute*600000+second*10000+dotsec更新counter计数值;
步骤3.3.3、只要进行过一次校正,则将valid_flag置为有效状态,此后利用timer3的定时更新机制进行守时。
而且,所述步骤4包括以下步骤:
步骤4.1、创建目录和文件;
步骤4.1.1、判断是否收到开始录取命令,是则进行步骤4.1.2,否则进行步骤4.1.4;
步骤4.1.2、检查DATETIME结构体的valid_flag字段是否有效,是则进行步骤4.1.3,否则进行步骤4.1.4;
步骤4.1.3、利用year字段、month字段、day字段、hour字段、minute字段、second字段创建目录名和录取文件名;
步骤4.1.4、结束,
步骤4.2、写入文件
步骤4.2.1、检查消息队列中是否有待写入报文,是则进行步骤4.2.2,否则进行步骤4.2.4;
步骤4.2.2、检查是否已创建并打开了录取文件,是则进行步骤4.2.3,否则进行步骤4.2.4;
步骤4.2.3、从消息队列中读出一条报文并写入录取文件,返回步骤4.2.1;
步骤4.2.4、结束。
而且,所述步骤5的具体实现方法为:数据接收任务每个运行周期从导航解算板通过高速串口查询接收原始测量信息、控制命令、计程仪速度、北斗位置、UTC时间和导航数据报文,每收到一个报文立刻将其写入相应的消息队列中;存储管理任务每个运行周期查询消息队列中是否有待写入数据,若有则将数据通过SDIO写入。
而且,所述步骤5的具体实现方法为:
任务调度:
创建任务时设置串口接收任务的优先级高于存储管理任务;
在每个任务周期的末尾调用vTaskDelay延时函数;
将串口查询周期设定为10ms;
存储管理任务运行周期设定为10ms;
消息队列深度设置:原始测量信息的频率为100Hz,其BUFSIZE设置为100,可缓存1S数据;其余信息频率均不超过1Hz,其BUFSIZE均设置为5。
临界资源管理:
在多任务系统中,FatFs文件系统必须设置为可重入的_FS_REENTRANT,重新定义syscall.c中的4个信号量函数,将其函数指针指向FreeRTOS的相应函数:
创建互斥信号量xSemaphoreCreateMutex;
删除互斥信号量vSemaphoreDelete;
申请互斥信号量xSemaphoreTake;
释放互斥信号量xSemaphoreGive。
本发明的优点和积极效果是:
本发明通过构建数据接收任务;构建消息队列;构建存储管理任务的自守时功能;构建存储管理任务;构建实时数据的录取流程,利用处理器自带的高速串口从导航解算单元接收原始测量信息和各种辅助信息,将其实时存储到板载SD卡存储器中。同时软件中使用了开源的FreeRTOS操作系统进行多任务调度和临界资源管理。
附图说明
图1为本发明实时数据的录取流程;
图2为本发明消息队列结构图。
具体实施方式
以下结合附图对本发明做进一步详述。
一种基于stm32f450处理器的实时数据录取方法,包括以下步骤:
步骤1、构建数据接收任务。
数据接收任务的串口接收采用双缓冲DMA机制,并且每个运行周期查询DMA传输完成标志,若传输完成,则清除传输完成标志,切换DMA至空闲缓冲区,同时将当前缓冲区中的数据读出,经过数据解析后,将符合要求的报文写入消息队列;若传输未完成,则中止当前数据传输,切换DMA至空闲缓冲区后再重新使能DMA传输,同时将当前缓冲区中的数据读出,经过数据解析后,将符合要求的报文写入消息队列。
步骤2、如图2所示,构建消息队列。
步骤2.1、构建信息队列结构;
定义:
structMSQ
{
Uint8type;//用于区分不同的消息
Uint8buf[BUFSIZE][DATA_LEN];//环形缓冲区
Uint64pWrite;//写入报文计数
Uint64pRead;//读取报文计数
};
其中DATA_LEN为数据报文包含的字节数,BUFSIZE为缓冲区中存储的最大报文数,由于每种报文的BUFSIZE和DATA_LEN可能都不相同,需要为每种报文创建一个消息队列;pWrite和pRead对BUFSIZE求余后,作为环形缓冲区的读写指针,即buf[pWrite%BUFSIZE]为可写入的空闲报文缓冲区首地址;buf[pRead%BUFSIZE]为待读取的报文缓冲区首地址;
步骤2.2、根据步骤2.1构建的信息队列结构,构建消息队列写操作;
初始状态,消息队列为空,pWrite和pRead均初始化为0,每个运行周期执行以下步骤:
步骤2.2.1、检查当前周期是否收到串口数据报文,若有进行步骤2.2.2,否则进行步骤2.2.4;
步骤2.2.2、检查(pWrite-pRead)是否小于BUFSIZE,小于则进行步骤2.2.3,否则进行步骤2.2.4;
步骤2.2.3、将当前接收到的串口报文写入缓冲区,pWrite加1;
步骤2.2.4、结束;
步骤2.3、根据步骤2.1构建的信息队列结构,构建消息队列读操作;
初始状态,消息队列为空,pWrite和pRead均初始化为0,每个运行周期执行以下步骤:
步骤2.3.1、检查(pWrite-pRead)是否大于0,大于0转入b),否则转入c);
步骤2.3.2、从消息队列读取一帧报文,pRead加1,返回a);
步骤2.3.3、结束。
步骤3、构建存储管理任务的自守时功能。
存储管理任务的主要功能之一是根据用户命令创建存储目录和存储文件,为保证名称的唯一性且易于辨认,需要在目录和文件名称中加入UTC时间信息。为此在软件中利用stm32f450的通用定时器设计了自守时功能。
步骤3.1、构建DATETIME数据结构;
{
Uint8valid_flag;//有效标志
Uint16year;//年
Uint16month;//月
Uint16day;//日
Uint16hour;//时
Uint16minute;//分
Uint16second;//秒
Uint16dot_sec;//点秒
Uint64counter;//0.1ms计数值
}
其中,dot_sec为UTC时间中小数点之后的部分,单位为0.1ms,取值范围[0,9999];
Counter=hour*36000000+minute*600000+second*10000+dotsec
步骤3.2、构建日期时间更新;
步骤3.2.1、利用stm32f450的通用定时器Timer3进行时间计数,计数周期0.1ms;
步骤3.2.2、利用1000Hz系统中断,每隔1ms将Timer3的计数增量累加至counter中;
步骤3.2.3、每隔10ms,利用Counter=hour*36000000+minute*600000+second*10000+dotsec反算更新DATETIME结构体中的hour、minute、second、dot_sec等字段,当counter计数值超过24小时后,则依次对day、month、year进行更新;
步骤3.3、日期时间校正;
步骤3.3.1、开机后valid_flag初始化为无效状态;
步骤3.3.2、当通过串口接收到UTC时间信息后,利用UTC时间依次校正year、month、day、hour、minute、second、dot_sec字段,同时利用Counter=hour*36000000+
minute*600000+second*10000+dotsec更新counter计数值;
步骤3.3.3、只要进行过一次校正,则将valid_flag置为有效状态,此后利用timer3的定时更新机制进行守时。
步骤4、构建存储管理任务。存储管理任务每隔10ms运行一次,每个运行周期进行如下操作:
步骤4.1、创建目录和文件;
步骤4.1.1、判断是否收到开始录取命令,是则进行步骤4.1.2,否则进行步骤4.1.4;
步骤4.1.2、检查DATETIME结构体的valid_flag字段是否有效,是则进行步骤4.1.3,否则进行步骤4.1.4;
步骤4.1.3、利用year、month、day、hour、minute、second字段创建目录名和录取文件名;
步骤4.1.4、结束,
步骤4.2、写入文件
步骤4.2.1、检查消息队列中是否有待写入报文,是则进行步骤4.2.2,否则进行步骤4.2.4;
步骤4.2.2、检查是否已创建并打开了录取文件,是则进行步骤4.2.3,否则进行步骤4.2.4;
步骤4.2.3、从消息队列中读出一条报文并写入录取文件,返回步骤4.2.1;
步骤4.2.4、结束。
步骤5、设置任务调度和临界资源管理,根据步骤1至步骤4进行实时数据录取。如图1所示,数据接收任务每个运行周期从导航解算板通过高速串口查询接收原始测量信息、控制命令、计程仪速度、北斗位置、UTC时间和导航数据报文,每收到一个报文立刻将其写入相应的消息队列中;存储管理任务每个运行周期查询消息队列中是否有待写入数据,若有则将数据通过SDIO写入。
通过上述一种基于stm32f450处理器的实时数据录取方法,通过某次硬件系统运行以说明本发明的效果。
一、运行环境
本发明运行需要的软硬件环境如下:
硬件环境:
处理器:stm32f450
主频:200Mhz;
RAM:512KB;
Flash:2MB;
USART高速串口:最高可支持921600bps;
SDIO:48Mhz数据传输频率和8位数据传输模式;
SD卡:容量64G高速NandFlash芯片。
软件环境:
操作系统:FreeRTOSV9.0.0;
文件系统:FatFSR0.10b。
二、软硬件资源配置和初始化
Timer3设置:
16位向上计数
计数周期0.1ms
计数最大值0xFFFF
高速串口USART1初始化:
DMA设置:
DMA0通道6发送
DMA0通道5接收
传输模式为单数据传输
地址生成方式增量模式
缓冲方式为双存储切换,每个缓冲区大小4KB
串口工作方式设置:
波特率460800
1位起始位
8位数据位
校验方式为无校验
DATETIME结构体初始化:全部初始化为0;
系统中断设置:
优先级分组GROUP4
子优先级0
中断周期1ms
FatFs文件系统设置:
剪裁模式为全功能
访问模式读写
字符串函数使能
目录创建使能
编码方式简体中文GBK
长文件名支持(最大255字符)
相对目录访问支持
扇区大小512字节
允许擦除
空闲扇区计数支持
多文件访问支持
文件操作可重入支持
位宽16bit支持
FreeRTOS操作系统配置:
系统节拍频率1000Hz
优先级数量5
最小栈空间130Bytes
堆空间总容量128KB
最长任务名称16字符
允许互斥操作
允许数字信号量
最大任务队列长度8
允许设置任务优先级
允许获取任务优先级
支持任务删除
支持任务挂起
支持任务延时
串口接收任务初始化:
任务优先级4
堆栈空间64KB
运行周期10ms
存储管理任务初始化:
任务优先级3
堆栈空间28KB
运行周期10ms
三、运行方案
任务调度:
创建任务时设置串口接收任务的优先级高于存储管理任务,这样串口接收任务可以抢占存储管理任务,保证串口数据的及时接收;
在每个任务周期的末尾调用vTaskDelay延时函数达到周期运行的目的;
按照串口工作方式计算可得,每1ms最多可接收46个字节,而DMA缓冲区大小为4KB,满负荷情况下可存储约89ms的串口数据,因而将串口查询周期设定为10ms,余量为88.76%;
存储管理任务运行周期设定与串口查询周期相同,也为10ms,在串口满负荷的状态下每周期可接收约460个字节数据,SD卡写入速度大约3MB/S,计算可得余量为98.46%;
消息队列深度设置:原始测量信息的频率为100Hz,其BUFSIZE设置为100,可缓存1S数据;其余信息频率均不超过1Hz,其BUFSIZE均设置为5。
临界资源管理:
在多任务系统中,FatFs文件系统必须设置为可重入的(_FS_REENTRANT),否则各任务间争抢临界资源(SD卡)会产生不可预期的错误。
可重入的核心是为FatFs建立互斥信号量机制,即重新定义syscall.c中的4个信号量函数,将其函数指针指向FreeRTOS的相应函数:
创建互斥信号量xSemaphoreCreateMutex;
删除互斥信号量vSemaphoreDelete;
申请互斥信号量xSemaphoreTake;
释放互斥信号量xSemaphoreGive。
本发明在某水下UUV的科研实验中已连续稳定运行6个月,期间录取数据不少于20GB,所有数据均可有效支持惯导算法事后仿真,为试验问题分析和故障排查提供了有力的技术支撑。
需要强调的是,本发明所述的实施例是说明性的,而不是限定性的,因此本发明包括并不限于具体实施方式中所述的实施例,凡是由本领域技术人员根据本发明的技术方案得出的其他实施方式,同样属于本发明保护的范围。
Claims (7)
1.一种基于stm32f450处理器的实时数据录取方法,其特征在于:包括以下步骤:
步骤1、构建数据接收任务;
步骤2、构建消息队列;
步骤3、构建存储管理任务的自守时功能;
步骤4、构建存储管理任务;
步骤5、设置任务调度和临界资源管理,根据步骤1至步骤4进行实时数据录取。
2.根据权利要求1所述的一种基于stm32f450处理器的实时数据录取方法,其特征在于:所述步骤1的具体实现方法为:数据接收任务的串口接收采用双缓冲DMA机制,并且每个运行周期查询DMA传输完成标志,若传输完成,则清除传输完成标志,切换DMA至空闲缓冲区,同时将当前缓冲区中的数据读出,经过数据解析后,将符合要求的报文写入消息队列;若传输未完成,则中止当前数据传输,切换DMA至空闲缓冲区后再重新使能DMA传输,同时将当前缓冲区中的数据读出,经过数据解析后,将符合要求的报文写入消息队列。
3.根据权利要求1所述的一种基于stm32f450处理器的实时数据录取方法,其特征在于:所述步骤2包括以下步骤:
步骤2.1、构建信息队列结构;
定义:MSQ的结构,使用Uint8 type用于区分不同的消息,使用Uint8buf[BUFSIZE][DATA_LEN]表示环形缓冲区,使用Uint64 pWrite表示写入报文计数,使用Uint64 pRead表示读取报文计数;
其中DATA_LEN为数据报文包含的字节数,BUFSIZE为缓冲区中存储的最大报文数,同时需要为每种报文创建一个消息队列;pWrite和pRead对BUFSIZE求余后,作为环形缓冲区的读写指针,buf[pWrite%BUFSIZE]为可写入的空闲报文缓冲区首地址;buf[pRead%BUFSIZE]为待读取的报文缓冲区首地址;
步骤2.2、根据步骤2.1构建的信息队列结构,构建消息队列写操作;
初始状态,消息队列为空,pWrite和pRead均初始化为0,每个运行周期执行以下步骤:
步骤2.2.1、检查当前周期是否收到串口数据报文,若有进行步骤2.2.2,否则进行步骤2.2.4;
步骤2.2.2、检查(pWrite-pRead)是否小于BUFSIZE,小于则进行步骤2.2.3,否则进行步骤2.2.4;
步骤2.2.3、将当前接收到的串口报文写入缓冲区,pWrite加1;
步骤2.2.4、结束;
步骤2.3、根据步骤2.1构建的信息队列结构,构建消息队列读操作;
初始状态,消息队列为空,pWrite和pRead均初始化为0,每个运行周期执行以下步骤:
步骤2.3.1、检查(pWrite-pRead)是否大于0,大于0转入b),否则转入c);
步骤2.3.2、从消息队列读取一帧报文,pRead加1,返回a);
步骤2.3.3、结束。
4.根据权利要求1所述的一种基于stm32f450处理器的实时数据录取方法,其特征在于:所述步骤3包括以下步骤:
步骤3.1、构建DATETIME数据结构;Uint8 valid_flag为有效标志;Uint16 year为年;Uint16 month为月;Uint16 day为日;Uint16 hour为时;Uint16 minute为分;Uint16second为秒;Uint16 dot_sec为点秒,Uint64 counter为0.1ms计数值;
其中,dot_sec为UTC时间中小数点之后的部分,取值范围[0,9999];
Counter=hour*36000000+minute*600000+second*10000+dotsec
步骤3.2、构建日期时间更新;
步骤3.2.1、利用stm32f450的通用定时器Timer3进行时间计数,计数周期0.1ms;
步骤3.2.2、利用1000Hz系统中断,每隔1ms将Timer3的计数增量累加至counter中;
步骤3.2.3、每隔10ms,利用Counter=hour*36000000+minute*600000+second*10000+dotsec反算更新DATETIME结构体中的hour字段、minute字段、second字段、dot_sec字段,当counter计数值超过24小时后,则依次对day字段、month字段、year字段进行更新;
步骤3.3、日期时间校正;
步骤3.3.1、开机后valid_flag初始化为无效状态;
步骤3.3.2、当通过串口接收到UTC时间信息后,利用UTC时间依次校正year字段、month字段、day字段、hour字段、minute字段、second字段、dot_sec字段,同时利用Counter=hour*36000000+minute*600000+second*10000+dotsec更新counter计数值;
步骤3.3.3、只要进行过一次校正,则将valid_flag置为有效状态,此后利用timer3的定时更新机制进行守时。
5.根据权利要求1所述的一种基于stm32f450处理器的实时数据录取方法,其特征在于:所述步骤4包括以下步骤:
步骤4.1、创建目录和文件;
步骤4.1.1、判断是否收到开始录取命令,是则进行步骤4.1.2,否则进行步骤4.1.4;
步骤4.1.2、检查DATETIME结构体的valid_flag字段是否有效,是则进行步骤4.1.3,否则进行步骤4.1.4;
步骤4.1.3、利用year字段、month字段、day字段、hour字段、minute字段、second字段创建目录名和录取文件名;
步骤4.1.4、结束,
步骤4.2、写入文件
步骤4.2.1、检查消息队列中是否有待写入报文,是则进行步骤4.2.2,否则进行步骤4.2.4;
步骤4.2.2、检查是否已创建并打开了录取文件,是则进行步骤4.2.3,否则进行步骤4.2.4;
步骤4.2.3、从消息队列中读出一条报文并写入录取文件,返回步骤4.2.1;
步骤4.2.4、结束。
6.根据权利要求1所述的一种基于stm32f450处理器的实时数据录取方法,其特征在于:所述步骤5的具体实现方法为:数据接收任务每个运行周期从导航解算板通过高速串口查询接收原始测量信息、控制命令、计程仪速度、北斗位置、UTC时间和导航数据报文,每收到一个报文立刻将其写入相应的消息队列中;存储管理任务每个运行周期查询消息队列中是否有待写入数据,若有则将数据通过SDIO写入。
7.根据权利要求1所述的一种基于stm32f450处理器的实时数据录取方法,其特征在于:所述步骤5的具体实现方法为:
任务调度:
创建任务时设置串口接收任务的优先级高于存储管理任务;
在每个任务周期的末尾调用vTaskDelay延时函数;
将串口查询周期设定为10ms;
存储管理任务运行周期设定为10ms;
消息队列深度设置:原始测量信息的频率为100Hz,其BUFSIZE设置为100,可缓存1S数据;其余信息频率均不超过1Hz,其BUFSIZE均设置为5。
临界资源管理:
在多任务系统中,FatFs文件系统必须设置为可重入的_FS_REENTRANT,重新定义syscall.c中的4个信号量函数,将其函数指针指向FreeRTOS的相应函数:
创建互斥信号量xSemaphoreCreateMutex;
删除互斥信号量vSemaphoreDelete;
申请互斥信号量xSemaphoreTake;
释放互斥信号量xSemaphoreGive。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111485083.4A CN114168365B (zh) | 2021-12-07 | 2021-12-07 | 一种基于stm32f450处理器的实时数据录取方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111485083.4A CN114168365B (zh) | 2021-12-07 | 2021-12-07 | 一种基于stm32f450处理器的实时数据录取方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114168365A true CN114168365A (zh) | 2022-03-11 |
CN114168365B CN114168365B (zh) | 2023-06-20 |
Family
ID=80483885
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111485083.4A Active CN114168365B (zh) | 2021-12-07 | 2021-12-07 | 一种基于stm32f450处理器的实时数据录取方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114168365B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1549108A (zh) * | 2003-05-07 | 2004-11-24 | 中兴通讯股份有限公司 | 一种实现通信过程零拷贝消息队列的方法 |
CN101282526A (zh) * | 2007-12-20 | 2008-10-08 | 袁玉芳 | 一种手机待机电流、待机时间及充电流程的测试设备 |
CN103412755A (zh) * | 2013-08-16 | 2013-11-27 | 深圳东原电子有限公司 | 一种硬件实时操作系统 |
CN103440171A (zh) * | 2013-08-25 | 2013-12-11 | 浙江大学 | 一种构件化硬件实时操作系统的实现方法 |
CN107710839A (zh) * | 2015-06-19 | 2018-02-16 | 华为技术有限公司 | 通信方法和装置 |
CN108768884A (zh) * | 2018-04-27 | 2018-11-06 | 江苏中科芯核电子科技有限公司 | 一种基于环形缓冲区的无线通信数据处理方法 |
CN108919633A (zh) * | 2018-07-21 | 2018-11-30 | 中国人民解放军91388部队 | 一种超低功耗时间统一模块同步授时算法 |
CN109617640A (zh) * | 2018-11-30 | 2019-04-12 | 电子科技大学 | 一种485总线自组网定时方法 |
-
2021
- 2021-12-07 CN CN202111485083.4A patent/CN114168365B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1549108A (zh) * | 2003-05-07 | 2004-11-24 | 中兴通讯股份有限公司 | 一种实现通信过程零拷贝消息队列的方法 |
CN101282526A (zh) * | 2007-12-20 | 2008-10-08 | 袁玉芳 | 一种手机待机电流、待机时间及充电流程的测试设备 |
CN103412755A (zh) * | 2013-08-16 | 2013-11-27 | 深圳东原电子有限公司 | 一种硬件实时操作系统 |
CN103440171A (zh) * | 2013-08-25 | 2013-12-11 | 浙江大学 | 一种构件化硬件实时操作系统的实现方法 |
CN107710839A (zh) * | 2015-06-19 | 2018-02-16 | 华为技术有限公司 | 通信方法和装置 |
CN108768884A (zh) * | 2018-04-27 | 2018-11-06 | 江苏中科芯核电子科技有限公司 | 一种基于环形缓冲区的无线通信数据处理方法 |
CN108919633A (zh) * | 2018-07-21 | 2018-11-30 | 中国人民解放军91388部队 | 一种超低功耗时间统一模块同步授时算法 |
CN109617640A (zh) * | 2018-11-30 | 2019-04-12 | 电子科技大学 | 一种485总线自组网定时方法 |
Also Published As
Publication number | Publication date |
---|---|
CN114168365B (zh) | 2023-06-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
AU2005219500B2 (en) | Using external memory devices to improve system performance | |
JP2003512670A (ja) | 連結リストdma記述子アーキテクチャ | |
JP2703494B2 (ja) | スワップ・ブロック組立方法及びメモリ管理機構 | |
KR102303008B1 (ko) | 파일 시스템에서의 플러싱 기법 | |
US11132294B2 (en) | Real-time replicating garbage collection | |
CN102567146B (zh) | 一种实现日志备份的方法及其装置、智能卡 | |
US9529809B2 (en) | Managing log data using a circular fixed size file | |
CN102981944B (zh) | 一种基于文件系统的日志存储方法 | |
CN107203330B (zh) | 一种面向读写数据流的闪存数据分布方法 | |
TWI739075B (zh) | 閃存的資料寫入方法及電腦程式產品 | |
CN101799788A (zh) | 一种分级管理存储资源的方法及系统 | |
CN109976898B (zh) | 分层任务系统的SPI与Eeprom异步通讯方法 | |
CN114168365A (zh) | 一种基于stm32f450处理器的实时数据录取方法 | |
US7299476B2 (en) | Method for exchanging information between operating systems coexisting on the same computer | |
CN105917322B (zh) | 用于通过usb盘和允许对其的实施的相关设备来交换控制的方法 | |
CN109407991A (zh) | 一种非易失性闪存执行命令的暂停及恢复方法、非易失性闪存及电子设备 | |
US6125412A (en) | System for performing input and output operations to and from a processor | |
CN102521146A (zh) | 一种flash存储器块细分的数据寻址存储方法 | |
CN113836600B (zh) | 一种Embedded Flash误写保护方法 | |
CN110928840A (zh) | 一种qnx6文件系统读取方法 | |
EP1266291B1 (en) | Method and apparatus for distinguishing reachable objects and non-reachable objects in an object-based application | |
JPH06309527A (ja) | Icカード | |
KR940006825B1 (ko) | 유닉스 시스템에서의 블록 i/o 드라이버의 동작제어방법 | |
CN116991484B (zh) | 存储设备的初始化方法、访问方法及相关装置 | |
CN109935252A (zh) | 存储器装置及其操作方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |