当前位置: 企业公开课 > 职业技能 > 电脑技能
高质高效嵌入式软件开发
课程安排: 深圳

其它排期:

授课讲师:李云

课程价格:5800

培训对象:

报名热线:400-801-3929

请填写您的报名信息

您的称呼

报名企业

您的电话

< 返回继续选课


时间地点: 2014-9-20 至 2014-9-21  深圳      授课讲师李云 学习费用: 5800 元/位

2014-09-20至2014-09-21【深圳】  

培训对象: 相关人员等

课程信息: 演讲嘉宾:李云 - 前Motorola软件开发架构师、现诺基亚西门子网络(NSN)软件系统架构师
具有一定硬件开发经验的资深软件开发工程师、51CTO作客专家,专注于嵌入式系统开发、软件平台与框架设计,以及UML建模。著有《专业嵌入式软件开发—全面走向高质高效编程》。早在2000年开始从事嵌入式软件开发工作,内容主要包括:操作系统内核、文件系统和IP协议栈的移植,IDE硬盘、以太网芯 片和PCI等外设的驱动开发。熟悉x86、PowerPC、XScale处理器,以及TI DSP。源码级熟悉uC/OS、RTEMS和VxWorks实时操作系统的实现,并在这些操作系统上有着丰富的软件开发经验。

课程简介:嵌入式系统在现实生活中随处可见,大到航天、汽车、通讯系统,小到手机、机顶盒,等等。嵌入式软件开发作为软件行业的一个分枝,也面临着其它软件领域所面临的各种挑战 — 如何快速上市?如何保证交付软件的最终质量?如何帮助工程师在工作与生活间取得平衡?等等。由于嵌入式软件开发是一个软硬件结合非常紧密的领域,这也使得其面临更大的挑战 — 软件的可开发性问题可能很突出、对开发人员的综合能力要求更高。 从事嵌入式软件开发,最困难的莫过于学习操作系统原理和处理器方面的知识。讲解操作系统原理如果以Linux、Windows CE、VxWorks等成熟的操作系统为素材并不好,因为它们太大,很容易让人“只见森林不见树木”,也容易让人望而生畏而失去学习的兴趣和信心。从软件开发的角度来看,操作系统的概念和实现原理一旦掌握,不论基于哪一个操作系统做开发都只是调用不同的函数而已。为了让学员获得最好的学习体验,本课程以讲师自己设计的一个实现简洁、完整的“实时”操作系统 — ClearRTOS,为基础,通过渐进式的方式细致地讲解操作系统的概念和实现原理。至于处理器方面的知识,本课程没有针对某一具体处理器,而是就编程方面所需的通用知识进行了讲解。对这些通用知识的掌握,将使得处理器对于学员不再那么神秘。 与非嵌入式软件开发采用集成开发环境不同,嵌入式软件开发大多是基于命令行的。软件开发工程师除了进行编码工作,还得能驾驭自己的编译环境并运用其他的开发工具辅助开发工作。本课程以来自GNU的工具为例帮助学员战胜这一挑战。值得强调的是,其中花了较大的篇幅帮助学员成为Makefile方面的专家。 要实现高质高效地从事软件开发工作,工程师还必须理解软件设计的重要性,并借助一定的质量保证方法论来提高工作质量和效率。软件设计和质量保证方法论是业内比较抽象和高级的话题,为此本课程通过带领实践的方式逐步展开讲解,以帮助学员获得一些实用的设计原则、最佳实践和一套有效的质量保证方法论。 总而言之,本课程从知识、工具、方法和思想这四大方面全面讲解如何专业地从事嵌入式软件开发,致力于帮助学员全面走向高质高效编程。

课程目标:
掌握嵌入式软件开发所需的与处理器相关的通用知识。
明白信号完整性对嵌入式软件开发的影响。
掌握嵌入式软件开发所需掌握的GNU工具。包括make、gcc、binutils、ld和gdb。
实现更加深入地理解C编程语言。
了解引导加载器的大致工作原理和功能。
掌握实时操作系统的设计和实现原理。包括多任务、任务同步通讯、内存管理、设备管理和定时器管理。
理解设计是软件质量之本,并掌握一种有效的模块管理、错误管理和目录结构管理方法。
理解什么是可开发性问题和了解一种解决方法。
理解平台与框架开发是打造高质量软件之路。
理解软件开发的困难和质量保证需要系统性的方法论。
理解软件工程的工作习惯对软件质量的影响。掌握一些终身受用的编程好习惯。
理解单元测试的重要性,并掌握一种简单有效的部署方法。
理解代码覆盖、静态分析和动态分析对构建高质软件的重要性。

课程对象:
以C为编程语言的嵌入式和非嵌入式软件开发工程师。
部分内容适合软件质量相关管理人员。
辅导资料:
《专业嵌入式软件开发 — 全面走向高质高效编程》(2012) 李云 电子工业出版社

课程大纲:
课程大纲:(共2天)

 

学习导引(1小时)
1.  学什么?
2.  怎么学?
3.  工程师技术能力层次模型
4.  高质高效软件开发团队效能模型
【硬件篇】处理器的基本概念(40分钟)
1.  微处理器与微控制器
2.  寄存器
3.  处理器的启动
4.  输入与输出
5.  指令与数据
6.  中断
7.  字节序
8.  边界对齐
9.  断点
10.  内存管理单元
11.  缓存
【硬件篇】开发活动中的硬件问题(20分钟)
1.  两个软件异常案例
2.  异常的背后 — 信号完整性
3.  应对信号完整性问题的方法
【工具篇】gcc,C语言编译器(1小时)
1.  交叉编译用其环境
2.  gcc幕后工作原理
3.  实用的gcc选项
 
【工具篇】bintuils工具集,软件开发利器(1小时)
1.  addr2line,指令地址翻译器
2.  ar,静态库生成器
3.  nm,符号显示器
4.  objdump,信息查看器
5.  objcopy,段剪辑器
6.  size,段大小观察器
7.  strings,字符串窥视器
8.  strip,程序文件瘦身器
【工具篇】ld,链接器(0.5小时)
1.  重定位的概念
2.  链接脚本
【编程语言篇】掌握必要的汇编知识(0.25小时)
1.  AT&T和Intel语法格式
2.  as的语法
3.  嵌入汇编的语法
【编程语言篇】深入理解程序的结构(0.25小时)
1.  段
2.  栈
3.  堆
【编程语言篇】ABI/EABI规范,缔造程序兼容合约(0.5小时)
1.  定义基本数据结构
2.  规范字节对齐处理
3.  分配寄存器的功能
4.  规定栈帧结构
【编程语言篇】混淆指针与数组所导致的问题(0.5小时)
1.  问题示例
2.  问题分析
3.  问题成因
4.  预防措施
【编程语言篇】volatile,让我保持原样(0.25小时)
1.  从例子理解volatile
【设计篇】设计,软件质量之本(1小时)
1.  软件设计是什么
2.  软件质量的概念
3.  阻碍改善设计的常见观念
4.  如何提高设计能力
5.  设计模式、设计原则和设计思想
6.  放之四海皆适用的设计原则
7.  软件技术发展的驱动力
 
 
 
主      题大  纲
【设计篇】模块管理,保障系统有序运行(0.5小时)
1.  模块管理参照系
2.  设计思路
3.  程序实现
4.  模块管理的一些思考
【设计篇】错误管理,不可获缺的用户需求(0.75小时)
1.  现状与出路
2.  表达错误的通用方法
3.  优化错误日志
【设计篇】目录结构管理,使项目进展更顺利(0.25小时)
1.  规划目录结构的意义
2.  出色目录结构的特点
3.  一个示例
【设计篇】平台与框架开发,高质量软件打造之路(0.5小时)
1.  系统库、平台和框架
2.  本质和优点
3.  架构模型
4.  困境与生命周期理论
【设计篇】可开发性设计,一种高效且经济的开发模式(0.5小时)
1.  可开发性问题一瞥
2.  可开发性设计的内涵
3.  设备抽象层
4.  更复杂的设备抽象层
5.  图形界面的可开发性设计
6.  其他可开发性设计
[操作系统篇】引导加载器,系统启航者(0.5小时)
1.  功能
2.  文件存储布局
3.  程序加载原理
4.  优点

【质量保证篇】质量保证导言(0.75小时)
1.  软件开发的特点
2.  保证质量的关键要素
3.  质量保证需要系统性的方法论
4.  走出质量困境的指导性思想
【质量保证篇】编程好习惯,质量保证的基本条件(0.75小时)
1.  一些终生受用的编程好习惯
【质量保证篇】单元测试,被忽视的质量保证方法(0.75小时)
1.  警惕单元测试无用论
2.  一个简单但不完善的单元测试例子
3.  构建单元测试框架
4.  无缝整合单元测试
5.  几个实施问题
6.  桩函数和打桩
7.  错误注入,一种可测试性设计
8.  平台开发与单元测试
9.  被测行为的确定性
10.  被测用例的有效性
【质量保证篇】代码覆盖,单元测试效果的衡量指标(0.25小时)
1.  了解代码覆盖工具
2.  无缝整合代码覆盖
3.  三个代码覆盖度量指标
【质量保证篇】静态分析,防止将失误带给用户(0.25小时)
1.  认识静态分析工具
2.  无缝整合静态分析工具
【质量保证篇】动态分析,使程序更健壮(0.5小时)
1.  结识动态分析工具
2.  无缝整合动态分析工具
【质量保证篇] 性能分析,让优化程序有的放矢(0.25小时)1.  初探性能分析工具
2.  无缝整合性能分析工具