Chinaunix首页 | 论坛 | 博客
  • 博客访问: 24762
  • 博文数量: 5
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2015-11-16 01:15
文章分类
文章存档

2017年(3)

2015年(2)

我的朋友
最近访客

分类: C/C++

2017-10-06 13:36:13

原文地址:PX4 源码学习日志 作者:cczy

Nuttx系统类似Linux,运行后是一个控制台,支持用户开发的各种指令,每个指令相当于一个小的应用程序。
每个应用程序的入口函数的定义类似:px4_simple_app_main(int argc, char *argv[]);
并且,这些函数必须被导出为C格式(CPP程序):

  1. extern "C" __EXPORT int camera_trigger_main(int argc, char *argv[]);

或者(C程序):

  1. __EXPORT int camera_trigger_main(int argc, char *argv[]);
这些函数的定义可以是在源码的任何地方,通常应户级的程序在nuttx目录下的app下面,当然也可以是其它地方。

所有的命令都定义在 builtin_commands.c文件里,而这个文件是编译时自动生成的。

-----------------------------------------------------------
PX4_bootloader:
主程序入口为 Main_f4.c中的main函数。
软件定义了USB和UART两种通讯方式,均可以与主机进行通讯,如烧录固件,查讯固件版本等。
static void board_init(void)函数是板级的初始化,这里初始化了USB口和UART口,并且可以通过宏定义来修改UART口的定义。
文件hw_config.h中包含了这些板级信号相关的定义。可以在这里修改LED灯和UART等相关设置,不同板子的型号用#if 来进行区分。
Bl.c的void bootloader(unsigned timeout)函数中定义了对命令的解析。

1. 命令格式为:
[命令字]([参数])[结束符], 其中参数域为可选项。结束符固定为0x20。

2. 非法命令的返回数据为:0x12 0x13  ---->static void invalid_response(void)
3. 失败状态返回的数据为:0x12 0x11 ----->static void failure_response(void)
4. 错误silicon的应答数据:0x12 0x14   ,该数据仅 PX4 FMU V4版本支持。---->static void bad_silicon_response(void)
5. 成功时返回的数据为:[命令数据请求][同步数据] ,其中“同步数据”来用表示命令执行成功,固定为0x12 0x10两个字节。--->static void sync_response(void)

6. 所支持的指令有:
0x21  0x20 ---- NOP for re-establishing sync
0x22  0x01 0x20  -------------- bootloader revision
         0x02 0x20  -------------- board ID
         0x03 0x20  -------------- board revision
         0x04 0x20  -------------- size of flashable area
         0x05 0x20  -------------- contents of reserved vectors 7-10

0x23 0x20 ----- erase program area and reset program address
0x27 0xNN ....... 0x20 ---- write bytes at program address and increment,0xNN必须是4的整数倍,用于SRAM地址对齐,且不大于256;
0x29 0x20 ---- compute & return a CRC
0x2A 0x01000000 0x20 ---- read a byte from OTP at the given address
0x2B 0x01000000 0x20 ---- read a word from UDID area ( Serial)  at the given address
0x2C 0x20 ---- read chip version (MCU IDCODE)
0x2D ---- set minimum boot delay
0x2E 0x20 ---- read chip version In ASCII
0x30 ---- boot the application
0x31 ---- emit debug information - format not defined


有用的链接:




阅读(1235) | 评论(0) | 转发(0) |
0

上一篇:Makefile编译PX4源码

下一篇:PX4编译脚本

给主人留下些什么吧!~~