crazyflie-firmware_数据接收流程

本文分析了crazyflie2.0如何通过UART与nrf51822通信接收数据的流程,从底层UART接收开始,经过Comm.c和Crtp.c的处理,详细介绍了数据如何被分发到各个任务,特别是关键的Crtp.c文件中的link结构体和queues的使用。

在crazyflie2.0中,数据是靠UART与nrf51822通信进行收发的,最近看了下从底层UART接收到数据怎样传输到各个任务的过程,下面先分析下接收数据的过程。

程序流程:

uart_syslink.c ->syslink.c ->Radiolink.c ->Comm.c ->Crtp.c
(1)首先是最底层接收数据的uart_syslink.c程序,将接收到的数据放入队列uartDataDelivery中;

void uartIsr(void)
{
  portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
  uint8_t rxDataInterrupt;

  if (USART_GetITStatus(UART_TYPE, USART_IT_TXE))
  {
    if (outDataIsr && (dataIndexIsr < dataSizeIsr))
    {
      USART_SendData(UART_TYPE, outDataIsr[dataIndexIsr] & 0x00FF);
      dataIndexIsr++;
    }
    else
    {
      USART_ITConfi
### 子模块路径 'crazyflie-firmware' 递归失败的原因及解决方案 当遇到 `git submodule recursion failed` 的错误时,通常是因为 Git 在尝试更新子模块时遇到了某些问题。以下是可能的原因以及对应的解决方法: #### 可能原因一:本地仓库状态不一致 如果本地仓库的状态与远程仓库不同步,则可能导致递归操作失败。 **解决方法**: 清理并重新初始化子模块。 ```bash git submodule deinit -f . rm -rf .git/modules/* git submodule update --init --recursive ``` 此过程会删除当前的子模块配置,并重新拉取最新的子模块内容[^1]。 --- #### 可能原因二:网络连接不稳定或远程仓库不可访问 Git 在克隆子模块的过程中可能会因为网络中断或其他外部因素而失败。 **解决方法**: 手动指定子模块 URL 并重试。 ```bash cd path/to/crazyflie-firmware git remote set-url origin https://github.com/bitcraze/crazyflie-firmware.git git pull origin master cd ../.. git submodule sync --recursive git submodule update --init --recursive ``` 通过设置正确的远程地址来确保能够正常访问目标仓库[^2]。 --- #### 可能原因三:子模块未被正确初始化 有时即使运行了 `git clone --recurse-submodules` 命令,也可能由于某种原因未能成功初始化所有子模块。 **解决方法**: 强制重新初始化子模块。 ```bash git submodule foreach git fetch git submodule foreach git checkout main git submodule foreach git pull origin main ``` 这一步可以确保每个子模块都处于最新版本并且分支无误[^3]。 --- #### 可能原因四:特定子模块损坏 如果某个具体的子模块(如 `crazyflie-firmware`)存在问题,则需要单独处理它。 **解决方法**: 进入子模块目录并修复其状态。 ```bash cd path/to/crazyflie-firmware git reset --hard HEAD git clean -fdx cd ../.. git submodule update --force --recursive ``` 这些命令用于恢复子模块到初始状态并清除任何潜在冲突文件[^4]。 --- ### 总结 以上提供了多种针对 `git submodule recursion failed` 错误的排查手段及其对应措施。实际应用中可以根据具体情况选择合适的方案逐一测试直到解决问题为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

技术在路上

帮助需要的人

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

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

打赏作者

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

抵扣说明:

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

余额充值