RTOS(序员-开发环境).pptVIP

  • 2
  • 0
  • 约9.37千字
  • 约 45页
  • 2018-10-04 发布于浙江
  • 举报
* 第五步:载入程序 Boot下更新程序的方法 按Ctrl + b进入Boot模式 使用Xmodem更新Boot或Ctrl Ctrl/Bootloader下载入程序的方法 Ctrl + c进入Ctrl模式或Bootloader模式 使用Xmodem或TFTP功能更新Ctrl/Bootloader或Main 注意:Boot/Bootloader/Ctrl不得轻易更新,否则会导致设备无法启动。 Xmodem/TFTP的具体操作请参见各模式下的帮助信息(使用help命令) * 开发环境 开发基本流程 子系统 常用调试方法 * 子系统介绍 为何要使用子系统 可卸载性 模块的初始化 子系统的类型 不可卸载的子系统 -- 内存管理模块 可卸载的子系统 -- 一些协议模块 * 子系统初始化阶段划分 基础类初始化 链路层初始化 网络层初始化 应用层初始化 驱动初始化 最终阶段 基础类 (SUBSYS_CLASS_BASIC): 被后续所有模块依赖的模块并且不依赖于任何其他应用模块 链路层模块(SUBSYS_CLASS_LINKLAYER): 链路层框架、链路层协议(不含驱动) 网络层模块(SUBSYS_CLASS_NETWORKLAYER): 网络层框架和协议。 应用层模块(SUBSYS_CLASS_APPLICATION): 网络层框架和协议。 驱动(SUBSYS_CLASS_DRIVER): 各种驱动,如PCI等 最终阶段(SUBSYS_CLASS_LAST): 从初始化顺序上讲必须位于上述阶段之后的模块 * 可卸载子系统的创建 1. 编写子系统 2. 编写配置文件 3. 修改makefile文件 * 编写子系统 1. 明确本模块需要在哪个阶段初始化 2. 明确子系统的依赖关系和初始化顺序关系 3. 明确本模块的初始化函数 * 子系统的定义 SUBSYS_DEFINE_00(subsysname,SUBSYS_CLASS_XXX, 1, xxx_init, dependance, sequence); dependance 子系统所依赖的其他子系统。 若所依赖的子系统不存在,那么该子系统不能被初始化。 sequence 子系统初始化之前需要先初始化的子系统列表。 列表中的子系统如果不存在,不会影响到该子系统的初始化 * 子系统的定义 例子: SUBSYS_DEFINE_00(a1, SUBSYS_CLASS_DRIVER, 1, a1_init, “pci”, NULL); SUBSYS_DEFINE_00(a2, SUBSYS_CLASS_LINKLAYER, 1, a2_init, NULL, NULL); SUBSYS_DEFINE_00(a3, SUBSYS_CLASS_LAST, 1, a3_init, “a1, a2”, “a1, a2”); * 子系统示例:Hello World static void hello_main(unsigned long argc, void *argv) { while (1) { printk(Hello World!\n); sleep(HZ); } } static void init_helloworld() { printk(KERN_INFO Start hello world task...\n); hello_task = create_task(hello_world, hello_main, 0, NULL, HELLO_TASK_STACK, APP_TASK_TS); } SUBSYS_DEFINE_00(helloworld, SUBSYS_CLASS_LAST, 1, init_helloworld, NULL, NULL); * 开发环境 开发基本流程 子系统 常用调试方法 * 嵌入式开发调试的特点 编译与运行在不同平台 交叉编译 缺乏调试软件的支持 PC端有gdb之类软件的支持 嵌入式系统无法直接单步跟踪运行情况 单步跟踪调试困难 调试器数量有限,且使用比较困难 通过打印变量值观察分析 RGOS上的常用调试方法 打印分析+走读代码 最常用、最有效的调试手段 故障诊断命令的辅助 debug support模式下的故障诊断命令 show命令 exec命令 一键通命令 * * 代码审查 代码自查与代码评审 对照代码审查表 上机调试前的必备工作 指针运算要特别小心 注意成对操作的匹配 不要急着编译运行 准备充分了吗? 不要做浮躁的人 练习 搭建嵌入式开发环境

文档评论(0)

1亿VIP精品文档

相关文档