×

FreeRTOS 内核实现与应用开发实战指南PDF电子书免费下载

消耗积分:0 | 格式:pdf | 大小:9.74 MB | 2019-11-15

黄敦

分享资料个

  本书是野火嵌入式教学丛书“RTOS 内核实现与应用开发实战指南的”FreeRTOS 版本,其中机械工业出版社出版的《RT-Thread 内核实现与应用开发实战指南—基于 STM32》是该书的姐妹篇。因为两本书均是写 RTOS 的书籍,只是针对的 RTOS 对象不一样,所以书中凡是涉及到 RTOS 抽象层的理论部分均会有很多相同的地方,具体的不同就体现为这两个 RTOS 的实现原理和代码层面上。本书分为两个部分,第一部分为“从 0 到 1 叫你写 FreeRTOS 内核”,该部分的章节名字与其姐妹篇《RT-Thread 内核实现与应用开发实战指南—基于 STM32》的章节名字基本类似,均采取循序渐进,层层叠加的方式来编排章节的序号和名字,但是在具体的内容上是不一样的,因为针对的 RTOS 不一样。其中“新建 FreeRTOS 工程—软件仿真”和 “裸机系统与多任务系统”这两章属于理论的抽象层,不具体针对哪一个 RTOS,所以基本一样。本书第二部分为“FreeRTOS 内核应用开发”,主要讲解 FreeRTOS 内核组件的源码实和 API 的使用,同样在章节命名和排序上也与该书的姐妹篇《RT-Thread 内核实现与应用开发实战指南—基于 STM32》类似。对于什么是任务、阻塞延时和信号量的应用等这些 RTOS 的共同抽象层的理论讲解也基本类似,但是具体涉及到这两个 RTOS 的原理实现和代码讲解的时候是完全不一样的,往往这部分的知识点才是读者要真正关心的内容。我把这两本书归为姐妹篇是因为两书的编写风格、内容框架和章节命名与排序基本一致,语言阐述也类似,且涉及到 RTOS 抽象层的理论部分均相同,但不同的是凡是涉及到 RTOS 的实现原理、内核源码的讲解和上层 API 使用时,均是不一样的,而且这些内容才是本书的重点部分,是读者朋友关心和学习的核心。两本书又无法合并在一起讲解,所以分为姐妹篇两本书。如果读者已经学习了其中一本书,再学习另外一本的话,那么涉及到 RTOS 抽象层的理论部分可跳过,只需把精力放在 RTOS 内核的实现和源码 API 的应用方面。因为现有的 RTOS,在理论层基本都是想通的,但在具体的码实现上又各有不同且各有特点,所以两书可以作为互补学习,只要掌握了其中一本的知识,再学习另外一本定会得心应手,如有神助。

  本书是首本系统讲解 FreeRTOS 的中文书籍,共分为两个部分,第一部分为“从 0 到 1 教你写 FreeRTOS 内核”,即重点讲解 FreeRTOS 的原理实现,从 0 开始,不断迭代,教你怎么把 FreeRTOS 的内核写出来,让你彻底学会任务是如何定义的,系统是如何调度的(包括底层的汇编代码讲解),多优先级是如何实现的等等操作系统最深层次的知识。当你拿到本书开始学习的时候你一定会惊讶,原来 RTOS 的学习并没有那么复杂,反而是那么的有趣,原来自己也可以写 RTOS,成就感立马爆棚。当第一部分知识你彻底掌握好之后,再切换到其它 RTOS 的学习,那简直就是易如反掌,纵观现在市面上流行的几种 RTOS,它们的内核的实现基本都差不多,只需要深入研究其中一种即可,没有必要每一种 RTOS 都深入的研究源码,如果你时间允许,看看那也无所谓。第二部分是“FreeRTOS 内核应用开发”,重点讲解 FreeRTOS 的移植,内核每个组件的应用,比起第一部分,这部分内容掌握起来比较容易。全书内容循序渐进,不断迭代,前一章都是后一章的基础,必须从头开始阅读,不能进行跳跃式的阅读。在学习的时候务必做到两点:一是不能一味地看书,要把代码和书本结合起来学习,一边看书,一边调试代码。看书倒是很简单,那如何调试代码?即单步执行每一条程序,看看程序的执行流程和执行的效果与自己大脑所想是不是一样;二是在每学完一章之后,必须将配套的例程重写一遍(切记不要复制,哪怕是一个分号,但可以抄),做到举一反三,确保真正理解。在自己写的时候肯定会错漏百出,这个时候要珍惜这些错误,好好调试,这是你提高编程能力的最好的机会。记住,程序不是一气呵成写出来的,而是一步一步调试出来的。

  本书第一部分以 FreeRTOS V9.0.0 官方源码为蓝本,抽丝剥茧,不断迭代,教你怎么从 0 开始把 FreeRTOS 内核写出来。书中涉及到的数据类型,变量名称、函数名称,文件名称,文件存放的位置都完全按照 FreeRTOS 官方的方式来实现,当你学完这本书之后可以无缝地切换到原版的 FreeRTOS 的使用。要注意的是,在实现的过程中,某些函数我会去掉一些形参和一些冗余的代码,只保留核心的功能,但这并不会影响我们学习。本书第二部分主要讲 FreeRTOS 的移植和内核组件的使用,不会再去深入讲解源码,着重讲应用,如果对第一部分不感兴趣的朋友,可以跳过第一部分,直接进入第二部分的学习,两者之间没有必然的联系。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(17)
发评论
Snmsr 06-03
0 回复 举报
感谢!!!!!! 收起回复
jf_40781797 2022-08-23
0 回复 举报
谢谢分享 收起回复
全部评论

下载排行榜

全部17条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.lene-v.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'FreeRTOS 内核实现与应用开发实战指南PDF电子书免费下载',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.lene-v.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);