您好,欢迎来到聚文网。
登录
免费注册
网站首页
|
搜索
热搜:
磁力片
|
漫画
|
购物车
0
我的订单
商品分类
首页
幼儿
文学
社科
教辅
生活
销量榜
μC/OS-III源码分析笔记
装帧: 平装
出版社: 机械工业出版社
作者: 李悦城,野火 编著 著
出版日期: 2016-01-01
商品条码: 9787111519676
版次: 1
开本: 16开
页数: 317
出版年份: 2016
定价:
¥79
销售价:
登录后查看价格
¥{{selectedSku?.salePrice}}
库存:
{{selectedSku?.stock}}
库存充足
{{item.title}}:
{{its.name}}
加入购物车
立即购买
加入书单
收藏
精选
¥5.83
世界图书名著昆虫记绿野仙踪木偶奇遇记儿童书籍彩图注音版
¥5.39
正版世界名著文学小说名家名译中学生课外阅读书籍图书批发 70册
¥8.58
简笔画10000例加厚版2-6岁幼儿童涂色本涂鸦本绘画本填色书正版
¥5.83
世界文学名著全49册中小学生青少年课外书籍文学小说批发正版
¥4.95
全优冲刺100分测试卷一二三四五六年级上下册语文数学英语模拟卷
¥8.69
父与子彩图注音完整版小学生图书批发儿童课外阅读书籍正版1册
¥24.2
好玩的洞洞拉拉书0-3岁宝宝早教益智游戏书机关立体翻翻书4册
¥7.15
幼儿认字识字大王3000字幼儿园中班大班学前班宝宝早教启蒙书
¥11.55
用思维导图读懂儿童心理学培养情绪管理与性格培养故事指导书
¥19.8
少年读漫画鬼谷子全6册在漫画中学国学小学生课外阅读书籍正版
¥64
科学真好玩
¥12.7
一年级下4册·读读童谣和儿歌
¥38.4
原生态新生代(传统木版年画的当代传承国际研讨会论文集)
¥11.14
法国经典中篇小说
¥11.32
上海的狐步舞--穆时英(中国现代文学馆馆藏初版本经典)
¥21.56
猫的摇篮(精)
¥30.72
幼儿园特色课程实施方案/幼儿园生命成长启蒙教育课程丛书
¥24.94
旧时风物(精)
¥12.04
三希堂三帖/墨林珍赏
¥6.88
寒山子庞居士诗帖/墨林珍赏
¥6.88
苕溪帖/墨林珍赏
¥6.88
楷书王维诗卷/墨林珍赏
¥9.46
兰亭序/墨林珍赏
¥7.74
祭侄文稿/墨林珍赏
¥7.74
蜀素帖/墨林珍赏
¥12.04
真草千字文/墨林珍赏
¥114.4
进宴仪轨(精)/中国古代舞乐域外图书
¥24.94
舞蹈音乐的基础理论与应用
内容简介
本书基于Cortex-M3内核,从源码分析和实际应用两个角度全面解析嵌入式实时操作系统μC/OS-III。为了让读者更好地理解,本书主要按照循环渐进的顺序对μC/OS-III中的函数逐一进行分析,采用通俗易懂的例子对书中内容进行解析。
作者简介
李悦城 资深STM32开发者,野火初学者社区最活跃的版主之一,在社区撰写了大量的教程,曾荣获多项电子设计大赛奖项。目前主要从事可穿戴设备的研发和STM32嵌入式系统开发工作,拥有非常丰富的嵌入式实时操作系统开发经验。
目录
前言
第1章实时操作系统及μC/OS-III简介
1.1单片机应用程序框架
1.1.1前后台系统
1.1.2嵌入式实时操作系统
1.2如何使用和学习μC/OS-III源码
1.3μC/OS-III文件结构简介
1.4μC/OS-III数据结构简介
1.5任务
1.6内核对象简介
1.6.1信号量
1.6.2事件标志组
1.6.3消息队列
1.6.4互斥信号量
1.6.5内存分区
1.6.6软件定时器
1.7μC/OS-III常见的程序段
1.7.1中断嵌套层数统计
1.7.2开中断和关中断
1.7.3使能中断延迟的锁住和开启调度器
1.7.4没有使能中断延迟的锁住和开启调度器
1.7.5中断嵌套检测
1.7.6调度器嵌套检测
1.7.7时间戳
1.7.8错误类型
1.7.9参数检测
1.7.10内核对象类型检测
1.7.11安全检测
1.7.12安全关键IEC6
1.8总结
第2章时钟节拍
2.1系统节拍中断服务程序
2.2节拍任务处理时间相关事务
2.2.1节拍列表更新
2.2.2节拍列表
2.2.3哈希算法检测到期任务
2.3总结
第3章时间管理
3.1实例演示
3.2任务开始延时
3.3任务插入节拍列表
3.4任务取消延时
3.5任务脱离节拍列表
3.6获取和设置时钟节拍
3.7μC/OS-III全局变量的定义和声明
3.8总结
第4章软件定时器
4.1实例演示
4.2插入定时器列表
4.3删除定时器
4.4脱离定时器列表
4.5停止定时器
4.6定时器内部运行机制
4.6.1定时器初始化
4.6.2定时器任务
4.6.3回调函数
4.7定时器剩余定时时间获取
4.8定时器状态获取
4.9总结
第5章多值信号量
5.1实例演示
5.2信号量的创建
5.3信号量等待队列
5.4内核对象添加到调试双向链表
5.5内核对象从调试双向链表中删除
5.6部分内核对象数据结构的特点
5.7发布信号量
5.7.1开始发布信号量
5.7.2结构体指针强制类型转换
5.7.3无确切类型指针
5.7.4单一任务提交处理
5.7.5标记某一内核对象被提交
5.7.6将任务从多个等待列表中移除
5.7.7将任务从一个等待列表中删除
5.7.8信号量提交过程涉及的时间戳
5.8等待信号量
5.9等待信号量过程的解析
5.9.1函数解析
5.9.2阻塞准备等待内核对象的任务
5.9.3阻塞任务
5.9.4初始化OS_PEND_DATA类型变量
5.9.5根据任务优先级将OS_PEND_DATA变量插入双向链表
5.10强制解除等待状态
5.10.1强制解除内核对象上的一个任务
5.10.2标记某一内核对象上的任务被强制解除等待状态
5.11删除信号量
5.12设置信号量计数值
5.13总结
第6章互斥信号量mut
6.1mutex变量的数据结构
6.2创建mut
6.3提交mut
6.4等待/获取mute
6.5获取mutex过程解析
6.5.1开始获取mute
6.5.2优先级继承过程
6.5.3改变任务优先级并调整任务在各种列表中的位置
6.6删除mute
6.7强制解除等待mut
6.8总结
第7章消息队列
7.1实例演示
7.2消息的数据结构
7.3消息池
7.4消息队列解析
7.5创建消息队列
7.6提交消息
7.7提交消息过程解析
7.8等待消息过程解析
7.9总结
第8章事件标志
8.1实例演示
8.2事件标志组数据结构解析
8.3创建事件标志组
8.4等待事件标志组
8.5提交事件标志组
8.6总结
第9章等待多个内核对象
9.1实例演示
9.2等待多个内核对象过程解析
9.2.1检查多个内核对象是否被提交过
9.2.2任务等待多个内核对象
9.3总结
第10章任务消息队列和任务信号量
10.1实例演示
10.2任务消息队列
10.2.1任务消息队列相关数据结构解析
10.2.2等待任务消息队列
10.2.3任务消息队列的提交
10.2.4强制解除等待任务消息队列
10.2.5小结
10.3任务信号量
10.3.1任务信号量相关数据结构
10.3.2等待任务信号量
10.3.3提交任务信号量
10.3.4强制解除等待任务信号量
10.3.5小结
第11章内存管理
11.1内存碎片是怎么形成的
11.2实例说明
11.3内存分区控制块数据结构
11.4创建内存分区
11.5获取内存块
11.6将内存块放回内存分区
11.7总结
第12章就绪优先级位映像表
12.1就绪优先级位映像表数据结构
12.2初始化就绪优先级位映像表
12.3查找就绪优先级位映像表中最高的优先级
12.4置就绪优先级位映像表中某个优先级处于就绪状态
12.5将就绪优先级位映像表相应位清
12.6总结
第13章 就绪列表
13.1就绪列表数据结构解析
13.2初始化就绪列表
13.3使任务就绪
13.4将任务从就绪列表对应的双向链表的前面转移到后面
13.5总结
第14章任务切换
14.1堆栈的基本概念
14.2Cortex-M3堆栈
14.3任务切换
14.4PendSV服务程序解析
14.5首次任务调度
14.6任务堆栈初始化函数OSTaskStkInit解析
14.7验证初始化堆栈弹栈结果
14.8中断级任务切换的宏OSIntCtxSw()解析
14.9任务切换过程中出现中断的处理
14.10总结
第15章任务管理
15.1任务创建
15.2挂起任务
15.3恢复挂起任务
15.4时间片轮转调度
15.4.1时间片轮转调度初始化
15.4.2时间片轮转调度核心算法
15.4.3放弃时间片
15.4.4设置任务时间片个数
15.5任务寄存器
15.5.1设置寄存器的内容
15.5.2访问任务寄存器
15.6总结
第16章中断管理
16.1中断延迟提交
16.1.1延迟提交信息记录块
16.1.2初始化延迟提交
16.1.3中断延迟提交内核对象
16.1.4延迟提交任务OS_IntQT
16.2中断嵌套管理
16.3开中断和关中断解析
16.4进入和退出临界段代码解析
16.4.1OS_CRITICAL_ENTER解析
16.4.2OS_CRITICAL_ENTER_CPU_CRITICAL_EXIT解析
16.4.3OS_CRITICAL_EXIT_NO_SCHED解析
16.4.4OS_CRITICAL_EXIT解析
16.5测量关中断时间
16.5.1测量关中断的初始化
16.5.2测量最大关中断时间
16.5.3获取最大关中断的时间
16.6总结
第17章各类统计信息
17.1实例演示
17.2CPU使用率计算
17.3CPU使用率测量的初始化
17.4堆栈检测过程简介
17.5堆栈检测
17.6实例解读堆栈溢出
17.7统计任务OS_StatT
17.8总结
第18章μC/OS-III在不同CPU上的移植
18.1移植接口主要文件编写
18.1.1os_cpu_c.c文件
18.1.2os_cpu_a.asm文件
18.1.3os_cpu.h文件
18.2编写CPU相关文件
18.2.1cpu_c.c文件和cpu_a.asm文件
18.2.2cpu.h文件
18.2.3cpu_def.h文件
18.2.4cpu_core.c文件和cpu_core.h文件
18.2.5cpu_cfg.h文件
18.3编写配置文件
18.3.1os_app_app.h文件
18.3.2os_cfg.h文件
18.4总结
摘要
前??言不少学习μC/OS的读者都会面临一种尴尬,就是想阅读μC/OS-III的源码却因为资料过少而转去阅读μC/OS-II的源码。如果拿着μC/OS-II的书来理解μC/OS-III的源码,多半也会感到淡淡的忧伤,因为两者的源码相差实在太大。为了更加规范,μC/OS-III不仅对很多变量进行了修改,而且在很多处理问题的机制上也有很大的突破,比如引入时间片、取消任务数量限制等,如下表所示。实际上,2009年就已推出μC/OS-III,但是直到现在市面上μC/OS-III的资料依然很少,介绍源码的资料更是少之又少,即使官方手册也只是介绍使用方法而不是介绍原理。笔者在阅读源码的过程中也遇到了一些问题,要是有足够的资料,很多疑惑就能够比较快地得到解答。所以,笔者在阅读源码时将μC/OS-III的原理、应用等记录下来,希望能为对μC/OS-III或者嵌入式实时操作系统有兴趣的读者提供帮助。 各版本μC/OS的主要区别特征 μC/OS μC/OS-II μC/OS-III推出年份 1992 1998 2009书籍 有 有 有是否开放源码 是 是 是抢占式多任务处理 是 是 是支持最多的任务数量 64 255 无限每个优先级的任务数 1 1 无限是否支持时间片轮转调度 否 否 是信号量 有 有 有互斥信号量 没有 有 有(可嵌套)时间标志 没有 有 有邮箱 有 有 没有(不需要)队列 有 有 有固定大小的内存管理 没有 有 有给任务发送消息不需消息队列 否 否 是软件定时器 否 是 是任务挂起/恢复 否 是 是(可嵌套)死锁预防 是 是 是可裁剪 是 是 是ROM空间大小 3K~8K 6K~26K 6K~24KRAM空间大小 1K+ 1K+ 1K+可固化 是 是 是运行时间配置 是 是 是编译时间配置 是 是 是为每个内核对象分配名字 否 是 是等待多个内核对象 否 是 是任务寄存器 否 是 是内嵌的性能测试 否 有限的 大量的用户定义钩子函数 否 是 是捕获任务返回 否 否 是在任务中处理心跳 否 是 是服务数目 大约20 大约90 大约70笔者认为,阅读μC/OS-III源码的主要理由如下。 1)查看优秀的源码可以让自己的编程技巧更完善,μC/OS-III源码的风格比较好,有借鉴意义。 2)了解嵌入式内核的一些“内幕”,如在多个任务中从一个任务向另一个任务发送消息的机制,这让我很好奇! 3)学习μC/OS-III源码的过程也可以作为一个学习数据结构的机会。μC/OS-III涉及的数据结构主要是线性表,源码中的很多数据结构都设计得非常好。 4)更好地利用μC/OS-III做开发工作。μC/OS官方有这么一句话:“熟悉了μC/OS-III这样的实时系统多任务内核后,读者将不会再回到传统的前后台系统的设计方法中去。”笔者觉得这必须建立在你真正懂μC/OS的基础上。μC/OS有时会出现莫名的问题,这时就会令人感到很头痛。当然,这主要跟使用者配置μC/OS出错或者错误使用某些系统函数有关,这也是强调要在会用的基础上学习μC/OS的原因。另外,网络协议LwIP、蓝牙协议等应用也都结合了嵌入式实时操作系统。如果已经学习过嵌入式操作系统,则会对这些知识有更好的掌握。也许在查找问题的过程中,你还能帮μC/OS找到几个bug,欢迎大家一起来“找茬”。 本书与其他书籍的编排方式不一样:其他书籍是按照官方文件的框架或者组件的方式编排的;本书更强调循序渐进,并结合了笔者在阅读μC/OS-III源码过程中的一些想法。比如一个结构体变量可能会有多个元素,工具书一般会把它们放在一起讲解,而本书为了易于读者更好地理解,只在某些源码涉及这个元素时才会介绍其作用和含义。如果你有时要将本书当作工具书来查询,则可结合这些相关内容涉及的源码进行查找。 在数据结构方面,笔者会通过很多自己制作的图片来介绍数据结构之间的关系,以便大家更好地理解μC/OS-III中的数据结构。事实上,这是一种非常好的理解方式。 本书是基于μC/OS的V3.02.00版本的源码编写而成的。另外,为了让大家更好地理解μC/OS-III,本书基于市面上流行的STM32野火开发板ISO-V2编写例程,该开发板使用的芯片是STM32F103ZET6,该芯片是基于Cortex-M3内核的。本书例程使用的IDE是4.72.10.0版本的MDK。 本书的读者定位是那些不满足于停留在使用嵌入式系统层面上,而是想深入理解嵌入式系统工作原理的学生、老师或者技术人员。因此,对读者的要求主要是有使用μC/OS-III的经验,这样会对μC/OS-III有所把握;当然,也可以边阅读本书边使用μC/OS-III,这样看书就不会被动。另外,要对嵌入式系统的具体工作原理有比较浓厚的兴趣,就像笔者使用μC/OS-III一样,一直想研究清楚它内部的原理,于是浓厚的兴趣帮笔者在阅读μC/OS-III源码的路上克服了很多困难。据说μC/OS-III代码量有三四万行(网上流传,未经考证),要想真正了解μC/OS-III的运行机制,就更需要兴趣。当然,对数据结构和Cortex-M3内核比较熟悉的读者也会更好地理解本书。建议读者在阅读本书的时候对上述的数据结构和Cortex-M3内核进行一定的了解,或者边读本书边学习这两方面的内容。 希望读者先看书中给出的程序,加些自己的注解,如果不懂再看书中讲解源码的文字,这样可以做到独立思考。本书比较适合采用这种阅读方式,因为本书在解析某个函数源码时会将相关知识糅合起来,而不是从头到尾逐行讲解。本书也用了一定的篇幅收纳介绍到的大部分代码,目的是让读者真正结合源码进行理解,而不是纸上谈兵。然而,这对读者提出了更高的要求。与阅读那些纯粹讲解嵌入式操作系统原理的书相比,阅读本书或许有些困难,但是如果坚持下来,相信收获也会更多。理解源码时要抓住其本质。希望本书让你学到的不只是μC/OS-III,而是嵌入式实时操作系统。 致谢首先感谢野火科技有限公司的创始人刘火良,笔者在他的鼓励和指导下编写了本书。 其次感谢审阅本书的张浩和Ifreecoding,他们不仅对本书进行了详细的审阅,还提出了很多修改意见。 接着感谢我的父母及我的好朋友。请允许我逐一道出这些好朋友的名字:林灿杰、庄培钊、陈佳鹏、潘炜键、杨崇新、陈德兴、邹秋云、陈映鹏、郑春升、李健雄、郭心如、吴思洁等,谢谢你们让我的生命更加丰富多彩。 感谢本书的策划编辑张国强先生,是他促成了本书的出版,同时提出了宝贵的写作建议,并对书稿进行了仔细审阅。 感谢《Cortex-M3权威指南》的译者宋岩和《大话数据结构》的作者程杰,他们给我提供了学习Cortex-M3内核和数据结构的非常好的资料。 由于本书涉及的知识面广,加上时间仓促,以及笔者的水平有限,所以疏漏之处在所难免,在此恳请专家和读者批评指正,可以发送邮件到 ucos-iii@qq.com与我进行交流,或者到骁龙BBS(www.bbsxiaolong.com)发帖交流。本书所有例程及相关资料都可以在论坛的μC/OS-III版块中下载,还可加入QQ群(223501362)进行交流。 感谢购买本书的你们,让我有机会认真地做好一件事情,也愿此书能在你解读μC/OS-III源码的路上带来帮助。 李悦城 野 火
×
Close
添加到书单
加载中...
点此新建书单
×
Close
新建书单
标题:
简介:
蜀ICP备2024047804号
Copyright 版权所有 © jvwen.com 聚文网