Nuttx系统类似Linux,运行后是一个控制台,支持用户开发的各种指令,每个指令相当于一个小的应用程序。
每个应用程序的入口函数的定义类似:px4_simple_app_main(int argc, char *argv[]);
并且,这些函数必须被导出为C格式(CPP程序):
-
extern "C" __EXPORT int camera_trigger_main(int argc, char *argv[]);
或者(C程序):
-
__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
有用的链接:
阅读(4455) | 评论(0) | 转发(1) |