http://jaist.dl.sourceforge.net/project/freertos/FreeRTOS/V8.0.1/FreeRTOSv8.0.1.exe
你试试。
分析crazyflie四轴方案的通信模块
crazyflie的通信模块比较复杂,下面分成几贴分别讨论。
Crazyflie的通信分成几个层次,下面从通信模块的代码comm.c讨论。
comm文件只有两个函数,一个是commInit函数,一个是commTest函数,分别负责通信的初始化和测试工作。初始化后(commInit)即实现了两个设备的通信连接,测试函数则用于测试该模块。既然commInit函数实现飞行器与遥控器的通信,我们只需要分析这个函数即可。
Code见下图
下面对每个函数分别讨论。
一、radiolinkInit()
关于esky协议,
http://sourceforge.net/p/arduinorclib/wiki/Esky%20Radio/ 两个网站有描述,不详细分析了,程序中仅仅将eskylink作为实验测试代码。
分析radiolinkInit()函数,该函数位于radiolink.c文件中。
分析函数:
1、nrfInit()
实现端口配置,中断配置,spi配置等
2、nrfSetInterruptCallback()
配置中断回调函数为radiolink的中断回调函数
3、创建信号量dataRdy和队列rxQueue、txQueue。
Queue和Task属于操作系统的概念,程序是在freeRTOS系统的环境下运行的,第5步的任务中使用。
4、初始化NRF24L01P。
配置无线电参数,频道,数据速率,地址,模式...
5、创建radiolinkTask任务。
任务内容:
任务很清晰,不停的接收信息到rxQueue,并从txQueue取得数据包发送出去。至于从消息队列到程序员接口的操作,如下图所示:
发送数据包的时候,只需要sendPacket函数将数据包pk发送到txQueue,之后radiolinkTask就会自动发送出去;接收数据包的时候,则是radiolinkTask 自动从radio中接收到的数据放入rxQueue,receivePacket函数从rxQueue中接收数据到pk中。sendPacket、receivePacket和setEnable三个函数共同组成了radio的操作,如下图:
这个函数结构体通过函数
返回函数指针。
该函数位于crtp.c文件中,该文件与crtp.h文件,共同定义了crtp ( Crazy Realtime Transfer Protocol )栈
该函数创建了两个队列tmpQueue和rxQueue,并创建了两个任务crtpTxTask和crtpRxTask。来看看两个任务都做了什么。
crtpTxTask任务在从tmpQueue中接收到数据包到p的地址后,调用sendPacket函数发送出去(该函数就是comm.c里面的sendPacket函数)
该crtpRxTask任务从链路中接收数据包到p,根据数据包的端口发送到不同端口的Queue或者丢弃,并根据不同端口调用不同的回调函数。
同comm.c一样,crtp.c提供了程序员接口函数:
crtpSendPacket函数将数据包发送到tmpQueue中,然后通过crtpTxTask任务发送出去。crtpRxTask将接收到的数据包按端口分发到不同的queue中,crtpReceivePacket函数按端口接收队列中的数据到数据包p中。
三、crtpSetLink(radiolinkGetLink())
该函数位于crtp.c中
设置crtp的操作函数,该函数的参数radiolinkGetLink()在第一部分分析radiolinkInit()最后提到过,而设置的变量 link 恰恰是crtpRxTask和crtpTxTask里面的link了。
四、crtpserviceInit()
该服务控制接收端在收到数据包后是否将该数据包发送回去,感兴趣的读者自己去分析。
五、logInit()
该函数位于log.c文件中,动态log系统信息。Crtp数据包有一个日志端口CRTP_PORT_LOG,在四轴中不是必需的,这里也不分析了。
六、consoleInit()
该函数位于console.c文件中,文件中函数不多,可以全拿来分析
初始化函数重置了消息包的长度,设置crtp的端口为CRTP_PORT_CONSOLE,创建一个消息发送函数consoleSendMessage()。
consolePutchar函数将字符加入消息数据包,在字符为’ ’或消息包达到最大长度时发送出去。
consolePuts函数...
consoleFlush函数强制发送数据包。
本程序提供了发送字符串的程序接口。
七、paramInit()
该函数位于param.c文件中,看了个大概,没全看明白,有明白的来看看。
总算凑合着看完了crazyflie四轴的通信模块,洋鬼子做出来的东西还是不错的。
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
每周了解几个硬件知识+buckboost电路(五)被打赏10分 | |
【换取逻辑分析仪】RA8 PMU 模块功能寄存器功能说明被打赏20分 | |
野火启明6M5适配SPI被打赏20分 | |
NUCLEO-U083RC学习历程2-串口输出测试被打赏20分 | |
【笔记】STM32CUBEIDE的Noruletomaketarget编译问题被打赏50分 | |
【换取逻辑分析仪】RA8使用perfcounter coremark跑分试验被打赏34分 | |
【换取逻辑分析仪】RA8使用perfcount计算freertos任务CPU使用率被打赏38分 | |
【换取逻辑分析仪】RA8使用RA smart 工具配置运行Freertos被打赏27分 | |
【换取逻辑分析仪】RA8 IAR 环境下Debug异常解析被打赏45分 | |
【笔记】visit内存数据异常问题被打赏50分 |