大疆osdk开发遇到的bug的解决 小结

本文分享了使用DJI ONBOARD SDK 3.6.0进行STM32平台二次开发的经验,包括解决常见问题的方法,如添加源文件、中断函数调试、内存管理及串口中断优化等。

osdk:即dji大疆onboard sdk,用来做二次开发的的开发包

我使用的ONBOARD SDK版本是:3.6.0 用于A3和N3的二次开发

官方的开发文档链接:https://developer.dji.com/onboard-sdk/documentation/quick-start/index.html

开发步骤:我用的工程是stm32,没有用linux和qt上的

买A3/N3硬件(我之前的博客说过的至少4大模块)=〉申请开发密钥并联机激活=〉安装上位机并实现simulator仿真=〉实测

我开发所遇到的bug以及解决的办法如下:(其实我遇到的不仅仅是这些,但是下面的这些印象比较深刻的)

1.dji-osdk3.6.0的工程无法添加.c和.h文件;

我一添加一个.c文件,出来无数个未定义的变量错误

--我一开始以为是我的路径或者文件包含不正确。或者还有中文路径,或者路径带有括号等等,试了很久,没有解决

--之后仔细还研究了整个代码的框架;我发现是原因是:它的库使用的是1.1.0;而我的库使用的是最新的版本;后来我把库

我把我的库修改到V1.0.8就解决了问题!!!

2.添加中断函数函数的时候,调试跳转到 b endp align 错误;如图位置

--其实这个错误,就是你开了某个中断(比如串口,定时器等等),但是没有写对应的XXX_IRQHandler()实体函数;

--当时我确实是已经写了中断函数IRQHandler(),但是由于它的架构使用的是C++,你用c来编写中断函数一定要添加添加#ifdef __cplusplus //必须加入这个宏定义,以支持c代码

XXX_IRQHandler() { ......}    //放在中间

#endif

  

3.HardFault_Handler的解决

(问题就是内存溢出或者访问越界或者堆栈溢出,关键在于如何定位错误点)

---这种错误我遇到过不止一次,我以前的主要解决思路就是利用堆栈或者内存地址的执行顺序来查中;这一点在IAR和mdk(keil),都是一样;然而这次很崩溃,因为这两个思路都不好使;所以我用的是错误报告

错误报告表开启如下:这个错误报告表,会爆出你程序停止,跑飞或者奇怪错误的时候的原因:

术语的说明官方有说明:http://www.onarm.com/dd/vtr/4250/8662.htm;

  

--由此,我的错误是Usage Fault-“INSTATE”(“压入堆栈的PC值指向一个尝试非法使用EPSR的指令”),我知道我的堆栈溢出了,我查看堆栈大小,我把我的堆大小改到2倍,问题解决了!

hardfault 协助信息解读:

4.while(1)中代码执行停止,程序在一直在串口中断循环;

定时器中断和其他中断每死;我定位了很多情况,最后的做法借鉴了道友:https://blog.youkuaiyun.com/origin333/article/details/49992383STM32串口中断卡死主循环问题分析

出现通过接收时,通过USART_GetFlagStatus读取ORE,若不为RESET,则读取DR数据丢弃

总结:

 

(1)打开RXNEIE,默认会同时打开RXNE和ORE中断。

(2)必须第一时间清零RXNE,如没及时清零,下一帧数据过来时就会产生Overrun error!

(3)错误就是ORE导致的。

(4)解决办法要清除ORE

eg:解决如下:

void USART2_IRQHandler(void)

{
  u8 key = 0;

  if(USART_GetITStatus(USART2,USART_IT_RXNE)!=Bit_RESET) //检查 USART 是否发生中断
  {
      USART_ClearITPendingBit(USART2,USART_IT_RXNE); // 清中断标志
      key=USART_ReceiveData(USART2);
      // save key at here.
  }
  if(USART_GetFlagStatus(USART2,USART_FLAG_ORE) == SET) // 检查 ORE 标志
  {
      USART_ClearFlag(USART2,USART_FLAG_ORE);
      USART_ReceiveData(USART2);
  }

}

详细参见:

 

《STM32串口中断卡死主循环问题分析》    http://blog.youkuaiyun.com/origin333/article/details/49992383

《STM32串口中断接收方式详细比较》  http://wenku.baidu.com/link?url=LOKe2MjxexxJSim2HNuTDGP3Tn5OQLu79u0oG7rHY7JPMaxQgIQPk-0y-OUxo9mMUvCObnP0bp5zw6W3udBeIFBzd-nUuzQpN1bJ6m5EReS

 暂时这么多,以后再更新!!!!

 

### 关于大疆 OSDK 的概述 大疆 Onboard SDK (OSDK) 是一款专为开发者设计的工具包,用于实现对 DJI 无人机平台的深度控制和集成。它允许开发者通过编程接口直接与无人机硬件交互,从而实现高级功能开发,例如自主导航、数据采集以及与其他设备的协同工作[^2]。 OSDK 提供了一系列 API 接口来支持多种核心功能,包括但不限于飞行控制、传感器数据获取、相机操作等。这些功能使得开发者能够在无需深入了解底层硬件细节的情况下快速构建复杂的应用程序。此外,OSDK 还提供了详细的文档和支持资源,帮助开发者更好地理解和利用其潜力[^3]。 以下是关于如何开始使用大疆 OSDK 的一些基本指导: #### 安装环境配置 为了成功运行基于 OSDK 的项目,首先需要设置合适的开发环境。这通常涉及安装必要的依赖库并确保计算机能正确连接到无人机。具体步骤如下所示(伪代码形式展示逻辑流程): ```bash # 下载官方提供的示例代码仓库 git clone https://github.com/dji-sdk/Onboard-SDK.git # 编译源码前确认已安装所需编译器及相关工具链 sudo apt-get update && sudo apt-get install build-essential cmake libusb-dev # 构建工程文件结构 cd Onboard-SDK/sample/linux_sample/ mkdir build && cd build cmake .. make ``` 完成以上准备工作之后即可加载自定义固件至目标机载电脑上,并测试初始通讯状态是否正常建立起来[^4]。 #### 主要模块解析 1. **Flight Control**: 负责处理所有的飞行动作指令发送给飞行控制器执行。 2. **Telemetry Data Access**: 实现从不同类型的传感器读取实时测量数值以便进一步分析处理。 3. **Mission Management**: 支持规划路径点任务或者地理围栏设定等功能特性。 4. **Camera Operation**: 控制云台角度调整以及触发拍照录像动作等等[^5]。 每部分都有对应的API调用方式,在实际编码过程中应当参照最新版本的手册说明来进行适当修改适配当前使用的机型特点需求变化情况。 ---
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaoxilang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值