文章目录

  • 一、前言
  • 二、代码
    • 2.1、main.h
    • 2.1、main.c
  • 三、DEBUG
  • 四、细节补充
    • 4.1、使用静态堆栈方式创建的线程只占用一点点RTX5上的内存
    • 4.2、通过RTX RTOS窗口,可以观察线程的细节。
    • 4.3、不建议将控制块定义为全局变量,应该由RTX动态分配。

一、前言

RTX5与其他RTOS一样,创建线程的方式分别静态堆栈与动态堆栈两种。
今天先学习使用静态堆栈方式创建RTX5线程,分别是LED线程与Start线程。LED线程用于翻转两个LED,Start线程用于创建其他线程,并printf一些信息出来。

静态堆栈方式创建线程,线程的内存由用户自己分配,但RTX5也要继续为线程分配80bytes的内存。如果喜欢用静态堆栈方式创建线程的话,可以将RTX5的Global Dynamic Memory size设置小一些,因为Global Dynamic Memory是用于动态堆栈方式,且RTX5默认将它设置32K啊。所以,如果只用静态堆栈方式创建线程的话,必须将Global Dynamic Memory设小一些,将内存预留出来。

一定要多看官方手册。官方手册上对应的内容:

二、代码

2.1、main.h

可以不包含 “rtx_os.h”,因为不需要使用控制块方式创建线程。

2.1、main.c


至于,堆栈的类型为什么是uint64_t,官方有说明:



最后,编译程序。

三、DEBUG

从Event Recorder的Debug Viewer看到Start线程正在运行。观察板子,两个LED也在闪烁。

四、细节补充

4.1、使用静态堆栈方式创建的线程只占用一点点RTX5上的内存

静态堆栈方式创建线程,相当于用户自己为线程分配内存。虽然说静态堆栈方式创建线程时,线程的内存由用户自己分配,但是并不代表完全不需要RTX5为线程继续分配内存。经过使用Event Recorder调试发现,静态堆栈方式创建线程,RTX5也需要继续为此线程分配80bytes内存。

4.2、通过RTX RTOS窗口,可以观察线程的细节。

4.3、不建议将控制块定义为全局变量,应该由RTX动态分配。

osThreadAttr_t结构体的成员cb_mem使用默认NULL,cb_size使用默认0。它们都使用默认,RTX5负责管理控制块。

cb_mem与cb_size不使用默认值时,将无法在RTX RTOS上查看到线程的细节

RTX5 | 线程管理01 - 创建线程(静态堆栈方式)相关推荐

  1. RTX5 | 线程管理02 - 创建线程(动态堆栈方式)

    文章目录 一.前言 二.代码 main.h main.c 三.DEBUG 四.细节补充 4.1.跟控制块方式不一样,可以在RTX RTOS观察到线程的信息 4.2.RAM相当富裕时,建议使用静态堆栈( ...

  2. Java并发基础01. 传统线程技术中创建线程的两种方式

    传统的线程技术中有两种创建线程的方式:一是继承Thread类,并重写run()方法:二是实现Runnable接口,覆盖接口中的run()方法,并把Runnable接口的实现扔给Thread.这两种方式 ...

  3. 【并发技术01】传统线程技术中创建线程的两种方式

    传统的线程技术中有两种创建线程的方式:一是继承 Thread 类,并重写 run() 方法:二是实现 Runnable 接口,覆盖接口中的 run() 方法,并把 Runnable 接口的实现扔给 T ...

  4. RTX5 | 消息队列01 - 创建消息队列

    文章目录 一.前言 二.实验的目的 三.API 3.1.osMessageQueueId_t 3.2.osMessageQueueAttr_t 3.3.osMessageQueueNew 四.代码 4 ...

  5. 陈硕智能指针线程安全_C++ 创建线程的方法

    C++开发过程中,创建线程是必不可少的,今天就给大家说说c++创建线程的方法,主要介绍我常用的2种方法. 第一种:CreateThread HANDLE WINAPI CreateThread( t ...

  6. java 创建线程_java多线程|创建线程的各种方式

    javaDEMO 本网站记录了最全的各种JavaDEMO ,保证下载,复制就是可用的,包括基础的, 集合的, spring的, Mybatis的等等各种,助力你从菜鸟到大牛,记得收藏哦~~https: ...

  7. 线程了解以及创建线程的Threading模块中的部分方法

    了解线程 1.什么是线程 在传统的操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 线程,其实就是一条流水线的过程,一条流水线必须属于一个车间,一个车间的工作过程是一个进程 车间负责把资源 ...

  8. Linux系统编程---13(线程控制函数,创建线程,循环创建多个线程,线程间共享全局变量)

    线程控制 操作系统并没有提供创建线程的系统调用接口,因此大佬们封装了一个线程的接口库实现线程控制.意为着用户创建线程都使用的是库函数(所以有时候我们说创建的线程是一个用户态线程,但是在内核中对应有一个 ...

  9. java 线程管理_Java平台线程管理

    简介 在计算机领域中,我们说的并发(concurrency)是指一些列任务的同时运行.如果一台电脑有多个处理器或者有一个多核处理器,这个同时性是真正意义上的并发:但是一台电脑只有一个单核处理器,这个同 ...

最新文章

  1. 利用FFmpeg切割视频
  2. Netweaver工作进程的内存限制 VS CloudFoundry应用的内存限制
  3. java POI Excel 单元格样式
  4. AR独角兽的死亡教训:融资3亿美元后,成投资人提线木偶,营销大于产品技术...
  5. mysql基础(九) 索引和视图
  6. 列表、元组、字典与集合
  7. 初探swift语言的学习笔记十(block)
  8. 三维CNN:收集一些最近的3d卷积网络PointNet++
  9. 批量恢复文件的Py脚本
  10. 7-5 统计大写辅音字母 (15 分)
  11. java中qualifier注解怎么写_Java 注解 Qualifier
  12. SoyNet:大豆叶部病害分类(研究思路清晰)
  13. python执行不了elif_浅谈对python中if、elif、else的误解
  14. 【Spring-tx】关于spring事务的思考
  15. 整理几个高质量Java自学网站
  16. 4种Dolby声场技术的区别
  17. Win8 ××× 客户端安装出现 An error occurred installing the TAP device driver 错误的解决...
  18. java控制台输入 scanner_java控制台输入Scanner、InputStreamReader、Console说明
  19. 34day 新浪微博(首页)
  20. Java之throw和throws的区别

热门文章

  1. 循环的各种形式(不拘一格编程序之四)
  2. Intel 收购计算机视觉开发公司 Itseez
  3. HDU2136 Largest prime factor
  4. jquery $.get()、$.ajax()与后台servlet交互方法
  5. 深入理解javascript原型链
  6. 线性表--链式实现方式
  7. 快速配置 Samba
  8. AS3编码规范(转)
  9. dairy-20110419-每日总结
  10. 详解JavaScript变量类型判断及domReady原理 写得很好