求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
 
 
 
开班计划 | 技术学院 | 管理学院 | 嵌入式学院 | 机械 | 军工学院 | 定向培养 | 专家指导  
 电话 English
成功案例   品质保证
 
成功案例
塞默菲舍 《嵌入式软件架构设
某水声通 嵌入式Linux应
广汽研究 ARM处理器体系架
联合汽微 嵌入式软件架构设计
某全球知 Linux内核和系
广汽研究 嵌入式软件架构设计
某知名显 RT-Thread

相关课程  
UML +RoseRealtime+嵌入式
C++嵌入式系统开发
嵌入式白盒测试
手机软件测试
嵌入式软件测试
嵌入式操作系统VxWorks
 
全部课程 >开发技能  
高质高效嵌入式软件开发
3997 次浏览  39 次
Jack Zhu
某智能物联网科技有限公司联合创始人,技术负责人,曾任Cisco、诺基亚高级架构师。
 
时间地点:北京、 上海 、深圳根据报名开班

课程费用: 5000元/人 详见 公开课学习手册
报公开课  
企业内训:可以根据企业需求,定制内训,详见 内训学习手册



认证方式:
培训前了解能力模型。
培训后进行能力评测:
  • 在线考试
  • 能力分析,给出学习建议
  • 合格者颁发证书,作为职业技能资格证明


    从事嵌入式软件开发,最困难的莫过于学习操作系统原理和处理器方面的知识。讲解操作系统原理如果以Linux、Windows CE、VxWorks等成熟的操作系统为素材并不好,因为它们太大,很容易让人“只见森林不见树木”,也容易让人望而生畏而失去学习的兴趣和信心。从软件开发的角度来看,操作系统的概念和实现原理一旦掌握,不论基于哪一个操作系统做开发都只是调用不同的函数而已。为了让学员获得最好的学习体验,本课程以讲师自己设计的一个实现简洁、完整的“实时”操作系统 — ClearRTOS,为基础,通过渐进式的方式细致地讲解操作系统的概念和实现原理。至于处理器方面的知识,本课程没有针对某一具体处理器,而是就编程方面所需的通用知识进行了讲解。对这些通用知识的掌握,将使得处理器对于学员不再那么神秘。

    与非嵌入式软件开发采用集成开发环境不同,嵌入式软件开发大多是基于命令行的。软件开发工程师除了进行编码工作,还得能驾驭自己的编译环境并运用其他的开发工具辅助开发工作。本课程以来自GNU的工具为例帮助学员战胜这一挑战。值得强调的是,其中花了较大的篇幅帮助学员成为Makefile方面的专家。

    要实现高质高效地从事软件开发工作,工程师还必须理解软件设计的重要性,并借助一定的质量保证方法论来提高工作质量和效率。软件设计和质量保证方法论是业内比较抽象和高级的话题,为此本课程通过带领实践的方式逐步展开讲解,以帮助学员获得一些实用的设计原则、最佳实践和一套有效的质量保证方法论。

    总而言之,本课程从知识、工具、方法和思想这四大方面全面讲解如何专业地从事嵌入式软件开发,致力于帮助学员全面走向高质高效编程。

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

    培训对象:以C为编程语言的嵌入式和非嵌入式软件开发工程师。
    学员基础:部分内容适合软件质量相关管理人员。
    授课方式: 定制课程 + 案例讲解 + 小组讨论,60%案例讲解,40%实践演练
    培训内容:2天
    学习导引
    • 学什么?
    • 怎么学?
    • 工程师技术能力层次模型
    • 高质高效软件开发组织能力模型
    [硬件篇] 处理器的基本概念
    • 微处理器与微控制器
    • 寄存器
    • 处理器的启动
    • 输入与输出
    • 指令与数据
    • 中断
    • 字节序
    • 边界对齐
    • 断点
    • 内存管理单元
    • 缓存
    [硬件篇] 开发活动中的硬件问题
    • 两个软件异常案例
    • 异常的背后 — 信号完整性
    • 应对信号完整性问题的方法
    [工具篇] make,开发环境全能管家
    • 从最简单的Makefile中了解规则
    • 创建基本的编译环境
    • 提高编程环境的实用性
    • 打造更专业的编译环境
    • 理解make的解析行为
    • Makefile的调试
    • make的常用选项
    • 活用make

     

    [工具篇] gcc,C语言编译器
    • 交叉编译用其环境
    • gcc幕后工作原理
    • 实用的gcc选项
    [工具篇] bintuils工具集,软件开发利器
    • addr2line,指令地址翻译器
    • ar,静态库生成器
    • nm,符号显示器
    • objdump,信息查看器
    • objcopy,段剪辑器
    • size,段大小观察器
    • strings,字符串窥视器
    • strip,程序文件瘦身器
    [工具篇] ld,链接器

    • 重定位的概念
    • 链接脚本
    [编程语言篇] 掌握必要的汇编知识
    • AT&T和Intel语法格式
    • as的语法
    • 嵌入汇编的语法
    [编程语言篇] 深入理解程序的结构
    [编程语言篇] ABI/EABI规范,缔造程序兼容合约
    • 定义基本数据结构
    • 规范字节对齐处理
    • 分配寄存器的功能
    • 规定栈帧结构
    [编程语言篇] 混淆指针与数组所导致的问题
    • 问题示例
    • 问题分析
    • 问题成因
    • 预防措施
    [编程语言篇] volatile,让我保持原样
    • 从例子理解volatile
    [设计篇] 设计,软件质量之本
    • 软件设计是什么
    • 软件质量的概念
    • 阻碍改善设计的常见观念
    • 如何提高设计能力
    • 设计模式、设计原则和设计思想
    • 放之四海皆适用的设计原则
    [设计篇] 模块管理,保障系统有序运行
    • 模块管理参照系
    • 设计思路
    • 程序实现
    • 模块管理的一些思考
    [设计篇] 错误管理,不可获缺的用户需求
    • 现状与出路
    • 表达错误的通用方法
    • 优化错误日志
    [设计篇] 目录结构管理,使项目进展更顺利
    • 规划目录结构的意义
    • 出色目录结构的特点
    • 一个示例
    [设计篇] 平台与框架开发,高质量软件打造之路
    • 系统库、平台和框架
    • 本质和优点
    • 架构模型
    • 困境与生命周期理论
    [设计篇] 可开发性设计,一种高效且经济的开发模式
    • 可开发性问题一瞥
    • 可开发性设计的内涵
    • 设备抽象层
    • 更复杂的设备抽象层
    • 图形界面的可开发性设计
    • 其他可开发性设计
    [操作系统篇] 引导加载器,系统启航者
    • 功能
    • 文件存储布局
    • 程序加载原理
    • 优点
    [操作系统篇] 任务,软件基本调度单元
    • 任务情景
    • 任务调度
    • 任务的生命周期
    • 任务控制
    • 竞争问题与中断控制
    • 任务与中断状态
    • 任务栈溢出检测
    • 滴答与空闲任务
    • 多任务环境控制
    • 任务模块管理
    • task1示例程序
    • 任务钩子函数
    • 任务变量
    • 其它概念与思考
    [操作系统篇] 任务同步与通信,实现协同工作
    • 信号量
    • 互斥锁
    • 事件
    • 消息队列
    • 死锁及预防
    [操作系统篇] 内存管理,协调动态内存的使用
    • 堆管理(含内存溢出和泄漏检测)
    • 内存池管理
    [操作系统篇] 设备管理,方便与外设交互
    • 字符设备管理
    • 中断管理
    • 设备管理的主要程序实现
    • 设备驱动程序实现
    • 驱动安装与设备注册
    [操作系统篇] 定时器,程序闹钟
    • 软件定时器分类
    • 设计思路
    • 中断回调定时器
    • 定时误差
    • 提高遍历效率
    • 改善实时性
    • 任务回调定时器
    [质量保证篇] 质量保证导言
    • 软件开发的特点
    • 保证质量的关键要素
    • 质量保证需要系统性的方法论
    • 走出质量困境的指导性思想
    [质量保证篇] 编程好习惯,质量保证的基本条件
    • 一些终生受用的编程好习惯
    [质量保证篇] 单元测试,被忽视的质量保证方法
    • 警惕单元测试无用论
    • 一个简单但不完善的单元测试例子
    • 构建单元测试框架
    • 无缝整合单元测试
    • 几个实施问题
    • 桩函数和打桩
    • 错误注入,一种可测试性设计
    • 平台开发与单元测试
    • 被测行为的确定性
    • 被测用例的有效性
    [质量保证篇] 代码覆盖,单元测试效果的衡量指标
    • 了解代码覆盖工具
    • 无缝整合代码覆盖
    • 三个代码覆盖度量指标
    [质量保证篇] 静态分析,防止将失误带给用户
    • 认识静态分析工具
    • 无缝整合静态分析工具
    [质量保证篇] 动态分析,使程序更健壮
    • 结识动态分析工具
    • 无缝整合动态分析工具
    [质量保证篇] 性能分析,让优化程序有的放矢
    • 初探性能分析工具
    • 无缝整合性能分析工具
    [质量保证篇] qBench,一个开发高质软件的工作台
       
    3997 次浏览  39 次
    其他人还看了课程
    高质高效嵌入式软件开发  3997 次浏览
    如何编写高质量代码  5917 次浏览
    对抗软件瑕疵的最佳实践  1670 次浏览
    Python+数据分析+tensorflow  3320 次浏览
    代码缺陷的传播机理及预防途径  1040 次浏览
    通用软件开发过程指南(一个项目实例)  5741 次浏览
    定制内训


    最新活动计划
    MBSE(基于模型的系统工程)4-18[北京]
    自然语言处理(NLP) 4-25[北京]
    基于 UML 和EA进行分析设计 4-29[北京]
    以用户为中心的软件界面设计 5-16[北京]
    DoDAF规范、模型与实例 5-23[北京]
    信息架构建模(基于UML+EA)5-29[北京]