PH47代码框架软件二次开发极简教程

 1. 教程说明

本教程适用于对飞控及Stm32程序设计比较熟悉的二次开发者快速掌握PH47框架的使用要点。本教程仅对PH47框架中最主要的二次开发特性进行简要说明,建议与框架中\DevStudio\Algorithms\Controller_Demo.cpp(.h)示例代码配合学习。关于二次开发特性中的详细或高级内容,请参见《PH47框架二次开发教程》。

对于飞控或是Stm32编程不是太熟练的开发者,建议先了解学习Stm32程序设计相关内容,以及《PH47框架二次开发教程》。

1.1 基本概念

  • 时间相关、循环控制、调试功能大部分基本功能由框架层全局函数实现。
  • 整个PH47框架内,数据读取、写入、交换等操作均依托框架层的数据总线系统(frm.bus),以frm.bus.Function()方式使用。
  • 机载调参参数(控制参数)的读取、写入存储均通过框架层的参数系统core.para实现,以core.para.Function()方式使用。
  • 用户代码一般位于应用层Application当中实现。应用层为用户提供了初始化、快速循环,普通循环、慢速循环函数,以及GCS上行指令响应函数、控制台指令响应函数等重要函数框架供用户扩充使用。

2. 基本全局功能函数使用

2.1 常用全局时间函数

函  数

功 能 描 述

HAL_Delay()

用于ms 级延时,执行时独占系统资源

osDelay()

用于ms 级延时。osDelay() 依赖于 FreeRTOS 启动完成,延时期间可以将系统资源轮换给其他线程使用

gDelay_us()

用于 us 级别延时。延时时间不要超过 1000us

gGetMills()

获取调用时刻距离 mcu 加电启动时刻的ms时间间隔, 获取数据范围为 4294967296ms,即1193 hour

gGetMills_f()

获取精确到小数点后3位的ms时间, 即精确到us。

gGetMills_f()在运行时间超过4800s后会溢出重置为 0 后重新开始计时

gGetMicros() 

获取mcu加电以来的us时间。

注意: us计时器溢出时间为600s

2.2 调试功能使用

函  数

功 能 描 述

TRACE()

使用邮件队列方式显示格式化字符串。

具有线程安全性,且连续调用能够确保顺序正确。依赖于 PH47 框架的启动完成, 框架启动前不能正常工作。显示时刻会晚于函数调用时刻(滞后不高于 10ms 级别)   。

TRACE("\r\ndemo> 1. TRACE at %.3fms", gGetMills_f());   

gPrintf()

使用中断方式显示格式化字符串。

不依赖于框架的启动完成。连续密集调用时显示的先后顺序可能会发生改变

gPrintf("\r\ndemo> 2. gPrintf at %.3fms", gGetMills_f());  

ASSERT(f)

表达式f真值确认。

若表示式f为false,则核心板状态指示LED连续快速闪烁,当前线程执行停止在ASSERT()语句处,同时在调试串口输出ASSERT语句所在的文件名及代码行号。

bus.arDbg_1[10]

bus.arDbg_2[10]

调试专用总线数据项。只需将调试数据赋值给总线数据项即可。

PH47框架已经预置了调试数据的下行发送机制,用户无需自己实现。

调试数据默认下行发送频率为25hz,运行过程中可调整。

3 使用CFreqDiv类进行循环频率控制

  • 1/3: 在.h文件中定义一个CFreqDiv类对象_FreqDemo_1Hz
CFreqDiv _FreqDemo_1Hz;
  • 2/3: 适当位置对_FreqDemo_1Hz对象进行初始化,如在.cpp文件初始化函数中,设定循环间隔。
_FreqDemo_1Hz.SetRunInv_ms(1000);  // 循环控制间隔为 1000ms, 即 1Hz
  • 3/3: 在需要进行循环频率控制的位置通过
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值