• freertos内核实现与应用开发实战指南:基于stm32 电子、电工 刘火良 杨森
  • freertos内核实现与应用开发实战指南:基于stm32 电子、电工 刘火良 杨森
  • freertos内核实现与应用开发实战指南:基于stm32 电子、电工 刘火良 杨森
  • freertos内核实现与应用开发实战指南:基于stm32 电子、电工 刘火良 杨森
  • freertos内核实现与应用开发实战指南:基于stm32 电子、电工 刘火良 杨森
21年品牌 40万+商家 超1.5亿件商品

freertos内核实现与应用开发实战指南:基于stm32 电子、电工 刘火良 杨森

从0到1教你写freertos内核,深入讲解freertos源码和内核组件应用

49 4.9折 99 全新

库存2件

北京丰台
认证卖家担保交易快速发货售后保障

作者刘火良 杨森

出版社机械工业出版社

ISBN9787111618256

出版时间2018-09

版次1

装帧平装

开本16

页数496页

定价99元

货号304_9787111618256

上书时间2024-07-04

智胜图书专营店

六年老店
已实名 已认证 进店 收藏店铺

   商品详情   

品相描述:全新
正版特价新书
商品描述
目录:

前  言引  言部分  从0到1教你写freertos内核章  初识freertos  21.1  freertos版权  21.2  freertos收费问题  21.2.1  freertos  21.2.2  openrtos  21.2.3  savertos  31.3  freertos资料获取  31.3.1  获取源码  31.3.2  获取书籍  41.3.3  快速入门  41.4  freertos的编程风格  51.4.1  数据类型  51.4.2  变量名  61.4.3  函数名  61.4.4  宏  71.4.5  格式  7第2章  新建freertos工程—软件  82.1  新建本地工程文件夹  82.2  使用keil新建工程  82.2.1  new project  92.2.2  select device for target  92.2.3  manage run-time environment  102.3  在keil工程中新建文件组  112.4  在keil工程中添加文件  112.5  调试配置  132.5.1  设置软件  132.5.2  修改时钟大小  132.5.3  添加头文件路径  13第3章  裸机系统与多任务系统  153.1  裸机系统  153.1.1  轮询系统  153.1.2  前后台系统  163.2  多任务系统  17第4章  数据结构—列表与列表项  204.1  c语言链表  204.1.1  单向链表  204.1.2  双向链表  224.1.3  链表与数组的对比  224.2  freertos中链表的实现  234.2.1  实现链表节点  234.2.2  实现链表根节点  254.3  链表节点插入实验  314.4  实验现象  34第5章  任务的定义与任务切换  355.1  本章目标  355.2  什么是任务  365.3  创建任务  375.3.1  定义任务栈  375.3.2  定义任务函数  385.3.3  定义任务控制块  395.3.4  实现任务创建函数  405.4  实现绪列表  455.4.1  定义绪列表  455.4.2  绪列表初始化  455.4.3  将任务插入绪列表  465.5  实现调度器  495.5.1  启动调度器  495.5.2  任务切换  545.6  main()函数  585.7  实验现象  615.8  本章涉及的汇编指令  64第6章  临界段的保护  656.1  什么是临界段  656.2  cortex-m内核快速关中断指令  656.3  关中断  666.3.1  不带返回值的关中断函数  666.3.2  带返回值的关中断函数  676.4  开中断  676.5  进入/退出临界段的宏  686.5.1  进入临界段  686.5.2  退出临界段  696.6  临界段代码的应用  706.7  实验现象  71第7章  空闲任务与阻塞延时  727.1  实现空闲任务  727.1.1  定义空闲任务的栈  727.1.2  定义空闲任务的任务控制块  737.1.3  创建空闲任务  737.2  实现阻塞延时  747.2.1  vtaskdelay()函数  747.2.2  修改vtaskswitchcontext()函数  757.3  systick中断服务函数  777.4  systick初始化函数  787.5  main()函数  807.6  实验现象  83第8章  多优先级  848.1  支持多优先级的方法  848.2  查找优选优先级的绪任务相关代码  858.2.1  通用方法  878.2.2  优化方法  878.3  修改代码以支持多优先级  898.3.1  修改任务控制块  898.3.2  修改xtaskcreatestatic()函数  898.3.3  修改vtaskstartscheduler()函数  938.3.4  修改vtaskdelay()函数  948.3.5  修改vtaskswitchcontext()函数  958.3.6  修改xtaskincrementtick()函数  968.4  main()函数  978.5  实验现象  100第9章  任务延时列表  1029.1  任务延时列表的工作  1029.2  实现任务延时列表  1039.2.1  定义任务延时列表  1039.2.2  任务延时列表初始化  1039.2.3  定义xnexttaskunblock-time  1039.2.4  初始化xnexttaskunblock-time  1049.3  修改代码以支持任务延时列表  1049.3.1  修改vtaskdelay()函数  1059.3.2  修改xtaskincrementtick()函数  1079.3.3  修改taskreset_ready_priority()函数  1099.4  main()函数  1109.5  实验现象  1100章  时间片  11110.1  时间片测试实验  11110.2  main.c文件  11210.3  实验现象  11510.4  分析  11610.4.1  taskselect_highest_priority_task()函数  11610.4.2  taskreset_ready_priority()函数  11710.5  修改代码以支持优先级  11810.5.1  修改xportsystick-handler()函数  11810.5.2  修改xtaskincrement-tick()函数  119第二部分  freertos内核应用开发1章  移植freertos到stm32  12411.1  获取stm32的裸机工程模板  12411.2  下载freertos v9.0.0源码  12411.3  freertos文件夹内容  12.3.1  freertos文件夹  12.3.2  freertos-plus文件夹  12811.3.3  html文件  12911.4  向裸机工程中添加freertos源码  12911.4.1  提取freertos简源码  12911.4.2  复制freertos到裸机工程根目录  13011.4.3  复制freertosconf?ig.件到user文件夹  13111.4.4  添加freertos源码到工程组文件夹  13111.5  修改freertosconf?ig.件  13311.5.1  freertosconf?ig.件内容  13311.5.2  修改freertosconfig.件  14311.6  修改stm32f10x_it.c文件  14711.7  修改main.c文件  15111.8  下载验证  1522章  任务  15312.1  硬件初始化

内容简介:

本书基于野火tm32全系列开发板介绍freerto内核实现与应用开发,全书分为两部分:部分教你如何从0到1把freerto内核写出来,从底层的汇编开始,讲解任务如何定义、如何切换,还讲解了阻塞延时如何实现,如何支持多优先级,如何实现定时器以及时间片等freerto的核心知识点;第二部分则开始讲解freerto内核组件的应用以及如何使用freerto进行多任务编程。本书内容翔实,案例丰富,配有大量示例代码,适合作为嵌入式领域工程师和爱好者的技术参书,也适合相关专业的学参。

作者简介:

刘火良,野火tm32开发板创始人,嵌入式软件工程师,长期从事tm32软硬件开发,网络教程零死角玩转tm32作者,著有tm32库开发实战指南。

精彩内容:

部分从0到1教你写freerto内核本部分以freerto nano为蓝本,抽丝剥茧,不断迭代,教大家如何从0开始把freerto写出来。这一部分着重讲解freerto实现的过程,当你学完这部分之后,再来重新使用freerto或者其他rto,将会得心应手,不仅知其然,而且知其所以然。在源码实现的过程中,涉及的数据类型、变量名称、函数名称、文件名称以及文件的存放目录都会接近按照freerto的来实现,一些不必要的代码将会剔除,但并不会影响我们理解整个作系统的功能。本部分几乎每一章都是前一章的基础,环环相扣,逐渐揭开freerto的神秘面纱,读起来会有一种豁然开朗的感觉。如果把代码都敲一遍,时得出的效果与书中给出的一样,那从心里油然而生的成感简直要爆棚,恨不得一下子把本书读完,真是让人看了还想看,读了还想读。章初识freerto1.1freerto版权freerto由美国的richard barry于2003年发布,richard barry是freerto的拥有者和维护者,在过去的十多年中freerto历经了9个版本,与众多半导体厂商合作密切,有数百万开发者,是目前市场占有率优选的rto。freerto于2018年被收购,改名为aw freerto,版本号升级为v10,且开源协议也由原来的gplv2修改为mit,与gplv2相比,mit更加开放,你接近可以理解为接近费。v9以前的版本还是维持原样,v10版本相比于v9是加入了一些物联网相关的组件,内核基本不变。收购freerto也是为了进军物联网和人工智能领域。本书还是以v9版本来讲解。1.2freerto收费问题1.2.1freertofreerto是一款“?开源费?”的实时作系统,遵循的是gplv2的许可协议。这里说到的开源,指的是可以费获取freerto的源代码,且当你的产品使用了freerto而没有修改freerto内核源码时,你的产品的代码都可以闭源,不用开源,但是当你修改了freerto内核源码时,必须将修改的这部分开源,反馈给社区,其他应用部分不用开源。费的意思是无论你是个人还是公司,都可以费地使用,不需要花费一分钱。1.2.2openrtofreerto和openrto拥有的代码是一样的,但是可从官方获取的服务却是不一样的。freerto号称费,openrto号称收费,它们的具体区别如表11所示。表11freerto开源授权与openrto商业授权的区别比较的项目 freerto openrto是否费 是 否可否商业使用 是 是是否需要版权费 否 否是否提供技术支持 否 是是否被法律保护 否 是是否需要开源工程代码 否 否是否需要开源修改的内核源码 是 否是否需要声明产品使用了freerto 如果发布源码,则需要声明 否是否需要提供freerto的整个工程代码 如果发布源码,则需要提供 否1.2.3avertoaverto也基于freerto,但是averto为某些特定的领域做了安全相关的设计,有关averto获得的安全验证具体如表12所示。averto需要收费。表12averto获得的安全方面的验证行?业?类?目 验?证?编?号工控 iec 61508铁路 en 50128医疗 iec 62304/fda 510k核 iec 61513、iec62138、ame nqa1汽车电子 io 26262加 iec 61511航空 do178b1.3freerto资料获取freerto的源码和相应的官方书籍均可从官网.freerto.org获得,如图11所示为官网首页。1.3.1获取源码单击图11中的download ource按钮,可以下载freerto近期新版本的源码。如果想下载以往版本,可从托管://ourceforge./project/freerto/f?ile/freerto/下载。截至本章编写时,freerto已经更新到v10.0.1,具体如图12所示。图11freerto官网首页图12freerto版本更新目录1.3.2获取书籍单击图11中的pdf book按钮可以下载freerto官方的两本电子书(英文版),分别为freerto v10.0.0 reference manual.pdf和matering_the_freerto_real_time_kernela_handon_tutorial_guide.pdf,一本是api参手册,另外一本是手把手入门教程。1.3.3快速入门单击图11中的quick tart按钮,可获取网页版的快速入门教程。1.4freerto的编程风格学一个rto,弄清楚它的编程风格很重要,这可以大大提高我们阅读代码的效率。下面我们从freerto中的数据类型、变量名、函数名、宏以及格式这几个方面做简单介绍。1.4.1数据类型在freerto中,使用的数据类型虽然都是标准c里面的数据类型,但是针对不同的处理器,对标准c的数据类型又进行了重定义,给它们设置了一个新的名字,比如为char重新定义了一个名字portchar,这里的port表示接,在将freerto移植到处理器上时,需要用这些接文件把它们连接在一起。但是用户在写程序时并非要遵循freerto的风格,仍可以直接用c语言的标准类型。在freerto中,int型从不使用,只使用hort型和long型。在cortexm内核的mcu中,hort为16位,long为32位。freerto中详细的数据类型重定义在portmacro.h头文件中实现,具体参见表13和代码清单11。表13freerto中的数据类型重定义新定义的数据类型 实际的数据类型(c标准类型)portchar charporthort hortportlong longportticktype unigned hortint 用于定义系统时基器的值和阻塞时间的值。当freertoconf?ig.h头文件中的宏conf?igue_16_bit_tick为1时则为16位 unigned int 用于定义系统时基器的值和阻塞时间的值。freertoconf?ig.h头文件中的宏conf?igue_16_bit_tick为1时则为32位portbae_type long 根据处理器的架构来决定是多少位的,如果是32/16/8位的处理器,则是32/16/8位的数据类型。一般用于定义函数的返回值或者布尔类型代码清单11freerto中的数据类型重定义 1 define portchar        char 2 define portfloat       float 3 define portdouble      double 4 define portlong        long 5 define porthort       hort 6 define porttack_type  uint32_t 7 define portbae_type   long 8  9 typedef porttack_type tacktype_t;10 typedef long baetype_t;11 typedef unigned long ubaetype_t;12 13 if( config ue_16_bit_tick == 1 )14 typedef uint16_t ticktype_t;15 define portmax_delay ( ticktype_t ) 0xffff16 ele17 typedef uint32_t ticktype_t;18 define portmax_delay ( ticktype_t ) 0xfffffffful在编程时,如果用户没有明确指定char的符号类型,那么编译器会默认指定char型的变量为无符号或者有符号。正是基于这个原因,在freerto中,我们都需要明确指定变量char是有符号的还是无符号的。在keil中,默认char是无符号的,但是也可以配置为有符号的,具体配套过程如图13所示。图13char型变量的符号配置(keil)1.4.2变量名在freerto中,定义变量时往往会把变量的类型当作前缀加在变量上,这样做的好处是让用户一看到这个变量知道该变量的类型。比如char型变量的前缀是c,hort型变量的前缀是,long型变量的前缀是l,portbae_type类型变量的前缀是x。还有其他的数据类型,比如数据结构、任务句柄、队列句柄等定义的变量名的前缀也是x。如果一个变量是无符号型的,那么会有一个前缀u,如果是一个指针变量,则会有一个前缀p。因此,当我们定义一个无符号的char型变量时会加一个uc前缀,当定义一个char型的指针变量时会加一个pc前缀。1.4.3函数名函数名包含了函数返回值的类型、函数所在的文件名和函数的功能,如果是私有的函数,则会加一个prv(private)的前缀。特别地,在函数名中加入了函数所在的文件名,这将帮助用户提高寻找函数定义的效率并了解函数作用,具体举例如下:1)vtakpriorityet()函数的返回值为void型,在tak.c文件中定义。2)xqueuereceive()函数的返回值为portbae_type型,在queue.c文件中定义。3)vemaphorecreatebinary()函数的返回值为void型,在emphr.件中定义。1.4.4宏宏均由大写字母表示,并配有小写字母的前缀,前缀用于表示该宏在哪个头文件定义,部分举例具体如表14所示。表14freerto宏定义举例前缀 宏定义的文件port(举例,portmax_delay) portable.htak(举例,takenter_critical()) tak.hpd(举例,pdtrue) proef.hconf?ig(举例,conf?igue_preemption) freertoconf?ig.herr(举例,errqueue_full) proef.h这里要注意的是信号量的函数都是一个宏定义,但是其函数的命名方法是遵循函数的命名方法而不是宏定义的方法。在贯穿freerto的整个代码中,还有几个通用的宏定义也要注意一下,都是表示0和1的宏,具体如表15所示。表15freerto通用宏定义宏 实?际?的?值pdtrue 1pdfale 0pdpa 1pdfail 01.4.5格式1个tab键等于4个空格键。我们在编程时优选使用空格键而不是使用tab键,当2个编译器的tab键大小设置得不一样时,移植代码时格式会变乱,而使用空格键不会出现这种问题。

   相关推荐   

—  没有更多了  —

以下为对购买帮助不大的评价

正版特价新书
此功能需要访问孔网APP才能使用
暂时不用
打开孔网APP