热搜关键词: 电路基础ADC数字信号处理封装库PLC

pdf

uCOS-III内核实现与应用开发实战指南——基于STM32 (野火)

  • 1星
  • 2023-11-27
  • 7.51MB
  • 需要1积分
  • 15次下载
标签: uCOS-III

uCOS-III

本书基于野火STM32全系列开发板介绍uC/OS-III内核实现与应用开发,全书分为两部分,第一部分先教你如何从0到1把uC/OS-III内核写出来,从底层的汇编开始讲解任务如何定义、如何切换,还讲解了阻塞延时如何实现、如何支持多优先级、如何实现任务延时列表以及时间片等uC/OS的核心知识点;第二部分讲解uC/OS-III内核组件的应用以及使用uC/OS-III进行多任务编程。

前言

引言

第一部分 从0到1教你写

C/OS内核

第1章 新建工程—软件仿真  2

1.1 新建本地工程文件夹  2

1.2 使用KEIL新建工程  2

1.2.1 New  Project  2

1.2.2 Select  Device  For  Target  3

1.2.3 Manage  Run-Time  Environment  3

1.3 在KEIL工程中新建文件组  4

1.4 在KEIL工程中添加文件  4

1.5 调试配置  6

1.5.1 设置软件仿真  6

1.5.2 修改时钟大小  6

1.5.3 添加头文件路径  7

第2章 裸机系统与多任务系统  8

2.1 裸机系统  8

2.1.1 轮询系统  8

2.1.2 前后台系统  9

2.2 多任务系统  10

第3章 任务的定义与任务切换  13

3.1 多任务系统中任务的概念  14

3.2 创建任务  15

3.2.1 定义任务栈  15

3.2.2 定义任务函数  16

3.2.3 定义任务控制块  17

3.2.4 实现任务创建函数  18

3.3 操作系统初始化  22

3.4 启动系统  24

3.5 任务切换  27

3.6 main()函数  33

3.7 实验现象  37

第4章 任务时间片运行  39

4.1 SysTick简介  39

4.2 初始化SysTick  40

4.3 编写SysTick中断服务函数  41

4.4 main()函数  42

4.5 实验现象  44

第5章 空闲任务与阻塞延时  45

5.1 实现空闲任务  45

5.1.1 定义空闲任务栈  45

5.1.2 定义空闲任务的任务控制块  46

5.1.3 定义空闲任务函数  47

5.1.4  空闲任务初始化  47

5.2 实现阻塞延时  48

5.3 main()函数  50

5.4 实验现象  52

第6章 时间戳  53

6.1 时间戳简介  53

6.2 时间戳的实现  53

6.3 时间戳代码  54

6.3.1 CPU_Init()函数  54

6.3.2 CPU_TS_Init()函数  55

6.3.3 CPU_TS_TmrInit()函数  56

6.3.4 BSP_CPU_ClkFreq()函数  57

6.3.5 CPU_TS_TmrFreqSet()函数  58

6.3.6 CPU_TS_TmrRd()函数  58

6.3.7 OS_TS_GET()函数  59

6.4 main()函数  59

6.5 实验现象  61

第7章 临界段  62

7.1 临界段简介  62

7.2 Cortex-M内核快速关中断指令  62

7.3 关中断  63

7.4 开中断  63

7.5 临界段代码的应用  64

7.6 测量关中断时间  68

7.6.1 测量关中断时间初始化  68

7.6.2 测量最大关中断时间  69

7.6.3 获取最大关中断时间  70

7.7 main()函数  71

7.8 实验现象  71

第8章 就绪列表  72

8.1 优先级表的定义及函数  72

8.2 就绪列表的定义及函数  80

8.3 main()函数  88

8.4 实验现象  88

第9章 多优先级  89

9.1 定义优先级相关全局变量  89

9.2 修改OSInit()函数  89

9.3 修改任务控制块  90

9.4 修改OSTaskCreate()函数  90

9.5 修改OS_IdleTaskInit()函数  92

9.6 修改OSStart()函数  93

9.7 修改PendSV_Handler()函数  93

9.8 修改OSTimeDly()函数  94

9.9 修改OSSched()函数  95

9.10 修改OSTimeTick()函数  97

9.11 main()函数  98

9.12 实验现象  101

第10章 时基列表  103

10.1 实现时基列表  103

10.1.1 定义时基列表变量  103

10.1.2 修改任务控制块  104

10.1.3 实现时基列表相关函数  106

10.2 修改OSTimeDly()函数  113

10.3 修改OSTimeTick()函数  114

10.4 main()函数  114

10.5 实验现象  114

第11章 时间片  115

11.1 实现时间片  115

11.1.1 修改任务控制块  115

11.1.2 实现时间片调度函数  116

11.2 修改OSTimeTick()函数  118

11.3 修改OSTaskCreate()函数  118

11.4 修改OS_IdleTaskInit()函数  120

11.5 main()函数  120

11.6 实验现象  122

第12章 任务的挂起和恢复  124

12.1 实现任务的挂起和恢复  124

12.1.1 定义任务的状态  124

12.1.2 修改任务控制块  125

12.1.3 编写任务挂起和恢复函数  126

12.2 main()函数  131

12.3 实验现象  133

第13章 任务的删除  134

13.1 实现任务删除  134

13.2 main()函数  136

13.3 实验现象  136

第二部分 C/OS-III内核

应用开发

第14章 移植C/OS-III到STM32  138

14.1 获取STM32的裸机工程模板  138

14.2 下载C/OS-III源码  138

14.3 C/OS-III源码文件介绍  141

14.3.1 EvalBoards  141

14.3.2 C-CPU  141

14.3.3 C-LIB  143

14.3.4 C/OS-III  143

14.4 移植到STM32工程  145

14.4.1 在工程中添加文件分组  145

14.4.2 添加文件到对应分组  145

14.4.3 添加头文件路径到工程中  146

14.4.4 具体的工程文件修改  147

14.4.5 修改源码中的bsp.c与bsp.h文件  149

14.5 按需配置最适合的工程  151

14.5.1 os_cfg.h  151

14.5.2 cpu_cfg.h  153

14.5.3 os_cfg_app.h  154

14.6 修改app.c  155

14.7 下载验证  157

第15章 创建任务  158

15.1 硬件初始化  158

15.2 创建单任务  160

15.2.1 定义任务栈  160

15.2.2 定义任务控制块  160

15.2.3 定义任务主体函数  160

15.2.4 创建任务  161

15.2.5 启动任务  163

15.2.6 app.c  163

15.3 下载验证单任务  166

15.4 创建多任务  166

15.5 下载验证多任务  171

第16章 C/OS-III的启动流程  172

16.1 “万事俱备,只欠东风”法  172

16.2 “小心翼翼,十分谨慎”法  173

16.3 两种方法的适用情况  175

16.4 系统的启动  175

16.4.1 系统初始化  175

16.4.2 CPU初始化  179

16.4.3 SysTick初始化  182

16.4.4 内存初始化  183

16.4.5 OSStart()函数  183

16.4.6 app.c  184

第17章 任务管理  187

17.1 任务的基本概念  187

17.2 任务调度器的基本概念  188

17.3 任务状态迁移  188

17.4 C/OS的任务状态  190

17.5 常用的任务函数  190

17.5.1 任务挂起函数OS_TaskSuspend()  191

17.5.2 任务恢复函数  OSTaskResume()  194

17.5.3 任务删除函数OSTaskDel()  198

17.5.4 任务延时函数  201

17.6 任务的设计要点  212

17.7 任务管理实验  213

17.8 实验现象  222

第18章 消息队列  223

18.1 消息队列的基本概念  223

18.2 消息队列的工作过程  224

18.2.1 消息池初始化  224

18.2.2 消息队列的运作机制  226

18.3 消息队列的阻塞机制  227

18.4 消息队列的应用场景  227

18.5 消息队列的结构  228

18.6 消息队列常用函数  230

18.6.1 消息队列创建函数OSQCreate()  230

18.6.2 消息队列删除函数OSQDel()  233

18.6.3 消息队列发送函数OSQPost()  239

18.6.4 消息队列获取函数OSQPend()  249

18.7 使用消息队列的注意事项  256

18.8 消息队列实验  257

18.9 实验现象  263

第19章 信号量  264

19.1 信号量的基本概念  264

19.1.1 二值信号量  264

19.1.2 计数信号量  265

19.2 信号量的应用场景  265

19.3 二值信号量的运作机制  266

19.4 计数信号量的运作机制  267

19.5 信号量控制块  267

19.6 信号量函数  268

19.6.1 信号量创建函数 OSSemCreate()  268

19.6.2 信号量删除函数OSSemDel()  271

19.6.3 信号量释放函数OSSemPost()  275

19.6.4 信号量获取函数OSSemPend()  280

19.7 使用信号量的注意事项  285

19.8 信号量实验  286

19.8.1 二值信号量同步实验  286

19.8.2 计数信号量实验  292

19.9 实验现象  298

19.9.1 二值信号量同步实验现象  298

19.9.2 计数信号量实验现象  299

第20章 互斥量  300

20.1 互斥量的基本概念  300

20.2 互斥量的优先级继承机制  300

20.3 互斥量的应用场景  303

20.4 互斥量的运作机制  303

20.5 互斥量控制块  304

20.6 互斥量函数  306

20.6.1 创建互斥量函数OSMutexCreate()  306

20.6.2 删除互斥量函数OSMutexDel()  308

20.6.3 获取互斥量函数OSMutexPend()  314

20.6.4 释放互斥量函数OSMutexPost()  320

20.7 互斥量相关实验  324

20.7.1 模拟优先级翻转实验  324

20.7.2 互斥量实验  330

20.8 实验现象  336

20.8.1 模拟优先级翻转实验现象  336

20.8.2 互斥量实验现象  336

第21章 事件  338

21.1 事件的基本概念  338

21.2 事件的应用场景  339

21.3 事件的运作机制  339

21.4 事件控制块  341

21.5 事件函数  342

21.5.1 事件创建函数OSFlagCreate()  342

21.5.2 事件删除函数OSFlagDel()  344

21.5.3 事件设置函数OSFlagPost()  348

21.5.4 事件等待函数OSFlagPend()  355

21.6 事件实验  366

21.7 实验现象  371

第22章 软件定时器  372

22.1 软件定时器的基本概念  372

22.2 软件定时器的应用场景  374

22.3 软件定时器的精度  374

22.4 软件定时器控制块  375

22.5 软件定时器函数  376

22.5.1 软件定时器创建函数 OSTmrCreate()  376

22.5.2 软件定时器启动函数OSTmrStart()  379

22.5.3 软件定时器列表管理  384

22.5.4 软件定时器停止函数OSTmrStop()  387

22.5.5 软件定时器删除函数OSTmrDel()  391

22.6 软件定时器任务  393

22.7 软件定时器实验  398

22.8 实验现象  403

第23章 任务信号量  405

23.1 任务信号量的基本概念  405

23.2 任务信号量函数  406

23.2.1 任务信号量释放函数OSTaskSemPost()  406

23.2.2 任务信号量获取函数OSTaskSemPend()  410

23.3 任务信号量实验  414

23.3.1 任务信号量代替二值信号量实验  414

23.3.2 任务信号量代替计数信号量实验  419

23.4 实验现象  424

23.4.1 任务信号量代替二值信号量实验现象  424

23.4.2 任务信号量代替计数信号量实验现象  425

第24章 任务消息队列  426

24.1 任务消息队列的基本概念  426

24.2 任务消息队列函数  427

24.2.1 任务消息队列发送函数OSTaskQPost()  427

24.2.2 任务消息队列获取函数OSTaskQPend()  431

24.3 任务消息队列实验  435

24.4 实验现象  439

第25章 内存管理  440

25.1 内存管理的基本概念  440

25.2 内存管理的运作机制  441

25.3 内存管理的应用场景  443

25.4 内存管理函数  443

25.4.1 内存池创建函数OSMemCreate()  443

25.4.2 内存申请函数OSMemGet()  447

25.4.3 内存释放函数OSMemPut()  449

25.5 内存管理实验  451

25.6 实验现象  456

第26章 中断管理  457

26.1 异常与中断的基本概念  457

26.1.1 与中断相关的硬件  458

26.1.2 与中断相关的术语  458

26.2 中断的运作机制  459

26.3 中断延迟的概念  460

26.4 中断的应用场景  461

26.5 ARM  Cortex-M的中断管理  461

26.6 中断延迟发布  463

26.6.1 中断延迟发布的概念  463

26.6.2 中断队列控制块  465

26.6.3 中断延迟发布任务初始化函数OS_IntQTaskInit()  466

26.6.4 中断延迟发布过程函数OS_IntQPost()  468

26.6.5 中断延迟发布任务函数OS_IntQTask()  471

26.7 中断管理实验  475

26.8 实验现象  481

第27章 CPU利用率及栈检测统计  482

27.1 CPU利用率的基本概念及作用  482

27.2 CPU利用率统计初始化  483

27.3 栈溢出检测概念及作用  485

27.4 栈溢出检测过程  487

27.5 统计任务函数OS_StatTask()  487

27.6 栈检测函数OSTaskStkChk()  493

27.7 任务栈大小的确定  496

27.8 CPU利用率及栈检测统计实验  496

27.9 实验现象  502

附录  503

展开预览

猜您喜欢

评论

登录/注册

意见反馈

求资源

回顶部

推荐内容

热门活动

热门器件

随便看看

  • 关于数字隔离器
    请问下ISO07631能不能用来隔离I2C信号啊? 能隔离的话那个SDA和SLK怎么接??他与单独专业隔离I2C的ISO1540比有哪些优劣势啊??求指点啊
  • 【零知ESP8266教程】快速入门10-使用PWM进行调光
    前面的分享热身完毕,接下来,我们要进入更专业电子技术的深入哦!PWM科普:PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码。PWM在很多场景下都能得到应用,比如调光、电机调速、音频等。在这里我们使用PWM对LED进行亮度调节,下面我们一起一步步动手制作吧。一、工具原
  • WINCE6.0 如何运行Skype ?
    请教高手:现在我们的平台是6410+CE6.0 想加入skype,但是,找不到CE版本的skype,网找到了很多资料,有的建议把WM的拿过来运行,但是我试过,很多方法,要不就是打开都打开不了,有些版本的,能运行,但是联不上服务器。请问,谁有能在CE6.0上用的skype?请给我一个,谢啦,或是有什么其它办法,请教我一下,谢谢。
  • 南华大学黄智伟系列--找到和选择合适的IC器件对取得好的竞赛成绩很重要
    [i=s] 本帖最后由 paulhyde 于 2014-9-15 03:35 编辑 [/i]1. 竞赛题目中对新型IC器件的选择应用有明确要求在“全国大学生电子设计竞赛组委会”所公布的“关于组织2011年全国大学生电子设计竞赛的通知”和“2011年全国大学生电子设计竞赛命题原则及征题要求”中可以看到“竞赛题目及要求”、“命题原则及要求”。其中:(1)命题范围应以电子技术(包括模拟和数字电路)应用设
  • 急急急|stm32程序下载
    我用jink仿真器在keil 中download 以后拔掉仿真器就程序就不运行了接上就可以这是为什么之前也没有遇到过这个问题啊高手请指点一下 不甚感激啊我下载过几次 有些时候是可以的 但是有些时候不行 这个东西到底是怎么回事 迷惑之中啊[color=red]JINK是全部断开的[/color][[i] 本帖最后由 duzhiming 于 2012-9-1 23:38 编辑 [/i]]
  • 电子密码锁的设计
  • 德州仪器等公司为什么从手机芯片领域消失了?
  • TI新年征文[手机打字我的感恩]
  • 求助大神解答啊~关于RVDS2.2的问题!!
  • 请问evc中如何获取一个文件的总行数?

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
×