RT-Thread线程实例

线程状态转化图

系统滴答时钟

每一个操作系统中都存在一个“系统心跳”时钟,是操作系统中最小的时钟单位。这个时钟负责系统和时间相关的一-些操作。作为操作系统运行的时间尺度,心跳时钟是由硬件定时器的定时中断产生。

系统的心跳时钟我们也常称之为系统滴答或时钟节拍,系统滴答的频率需要我们根据CPU的处理能力来决定。

时钟节拍使得内核可以将线程延时若干个整数时钟节拍,以及线程等待事件发生时,提供等待超时的依据。

频率越快,内核函数介入系统运行的几率就越大,内核占用的处理器时间就越长,系统的负荷就变大;频率越小,时间处理精度又不够。
我们在stm32平台上一般设置系统滴答频率为100Hz,即每个滴答的时间是10ms。

在Drivers文件夹下的board.c文件中

/*Configure the Systick interrupt time*/
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq() / RT_TICK_PER_SECOND); //#define RT_TICK_PER_SECOND 100

GPIO驱动架构操作IO

IO初始化

void rt_pin_mode(rt_base_t pin, rt_base_t mode)
//mode类型
/*
PIN_MODE_OUTPUT、PIN_MODE_INPUT、
PIN_MODE_INPUT_PULLUP、PIN_MODE_INPUT_PULLDOWN、
PIN_MODE_OUTPUT_OD
*/

IO写入

void et_pin_write(rt_base_t pin, rt_base_t value)
//value类型
/*
PIN_HIGH
PIN_LOW
*/

IO读出

int rt_pin_read(rt_base_t pin)

pin指代什么

在Drivers文件下的drv_gpio.c文件中对144引脚芯片口进行定义

__STM32_PIN(14, F, 4)    //表示F4脚用14表示

LED小例

程序代码

//创建动态线程
void led_test(void)
{rt_thread_t tid;tid = rt_thread_create("led",   //线程名led_entry, RT_NULL,    //入口函数及参数(一般为RT_NULL)512, //线程栈大小10, 10)  //优先级  时间片
}//如果获得线程控制块,启动这个线程
if (tid != RT_NULL)rt_thread_startup(tid);//入口函数
static void led_entry(void *param)
{/*需要包含头文件#include <rtdevice.h>*/rt_pin_mode(14, PIN_MODE_OUT);while(1){rt_pin_write(14, PIN_LOW);rt_thread_delay(50);rt_pin_write(14, PIN_HIGH);rt_thread_delay(50);}
}

补充:几种延时函数

rt_thread_delay(50); //延时50个时钟节拍
rt_thread_mdelay(500);  //延时500ms,需要是100ms的倍数
rt_thread_sleep(50);    //挂起50个时钟节拍

线程栈大小分配

先将线程栈大小设置-一个固定值(比如2048) ,在线程运行时通过查看线程栈的使用情况,了解线程栈使用的实际情况,根据情况设置合理的栈大小,一般将线程栈最大使用量设置为70%

通过在终端中输入list_thread即可知道当前的线程及信息。

msh />list_thread
thread   pri  status      sp     stack size max used left tick  error
-------- ---  ------- ---------- ----------  ------  ---------- ---
tshell    20  running 0x00000188 0x00001000    14%   0x00000002 000
tidle0    31  ready   0x0000005c 0x00000100    51%   0x00000009 000
timer      4  suspend 0x00000080 0x00000200    25%   0x00000009 000
main      10  suspend 0x00000148 0x00000800    31%   0x00000013 000

在RT-Thread Studio中实现

RT-Thread线程实例相关推荐

  1. rt thread系统下添加wiznet软件包后,不插网线CPU利用率100%问题

    rt thread系统下添加wiznet软件包后如果不插网线的话其他任务运行很卡,使用ps命令发现优先级低的任务很多都超时了 rt thread线程错误码 添加了一个可以查看CPU利用率的软件包CPU ...

  2. 在Android中使用Handler和Thread线程执行后台操作

    在 Android中使用Handler和Thread线程执行后台操作 对于线程的控制,我们将介绍一个 Handler类,使用该类可以对运行在不同线程中的多个任务进行排队,并使用Message和Runn ...

  3. Boost:线程实例

    Boost:线程实例 实现功能 C++实现代码 实现功能 boost::thread的测试 C++实现代码 #include <boost/thread.hpp> #include < ...

  4. android java thread_Android中断并重启一个Thread线程的简单方法

    这里简单的总结下(大概思路,没调试,可能会有错!): MyThread.java pulbic class MyThread implemets Thread{ @overide public voi ...

  5. JAVA笔记 之 Thread线程

    线程是一个程序的多个执行路径,执行调度的单位,依托于进程存在. 线程不仅可以共享进程的内存,而且还拥有一个属于自己的内存空间,这段内存空间也叫做线程栈,是在建立线程时由系统分配的,主要用来保存线程内部 ...

  6. 为什么使用start方法启动Java的Thread线程?

    一.简介 在Java代码当中,当我们需要开启子线程去处理一些任务的时候,往往是调用Thread对象的start方法,这样Thread实例中的Runnable对象的run方法就会在一个新的线程当中执行: ...

  7. 线程实例分析---线程的综合运用(精灵线程,多线程,中断,通信)【java养成】

    Java学习打卡:第二十八天 内容导航 Java学习打卡:第二十八天 线程实例分析 Q1:线程与精灵线程的运用 题目内容: 问题分析 Q2:多线程与interrput的应用 题目内容: Q3 模拟买票 ...

  8. RT Thread之 Uart2 操作

    官网连接:https://docs.rt-thread.org/#/rt-thread-version/rt-thread-standard/programming-manual/device/uar ...

  9. 基于rt thread smart构建EtherCAT主站

    我把源码开源到到了gitee,https://gitee.com/rathon/rt-thread-smart-soem 有兴趣的去可以下载下来跑一下 软件工程推荐用vscode 打开.rt thre ...

最新文章

  1. SAP卢东明:大数据同样需要小身材
  2. MySQL DISTINCT:去重(过滤重复数据)
  3. MySQL数据操作(DML)详解(小白都能懂欧)
  4. Clickhouse Engine kafka 将kafka数据同步clickhouse
  5. Linux 7 cmake:curses library not found
  6. java GUI怎么输入_在Swing中创建Java GUI以进行表单输入
  7. NEERC2017 Archery Tournament 线段树 新套路
  8. Ubuntu 免密登录
  9. 小汤学编程之JAVA基础day06——面向对象(一):类与对象
  10. 服务注册发现方案需求调研
  11. java去0,Java如何处理除零?
  12. 十六进制和字符串的转换
  13. 《Redis视频教程》(p6)
  14. 360安全卫士团队版or企业版卸载
  15. [EMNLP 2022] VIRT: Improving Representation-based Text Matching via Virtual Interaction
  16. 宋鸿兵 - 货币战争5(2014年3月20日)
  17. 汽车区域控制器的关键技术和MCU解决方案深度分析
  18. 建设GSM900/1800双频网应考虑的几个问题(转)
  19. 统计找出一千万以内,一共有多少质数
  20. 2020-07-03

热门文章

  1. 顶点缓冲区与着色器 (The Cherno + LeranOpenGL)笔记
  2. 机器指令和微指令的关系
  3. 总结 and 读后感之自控力 By 凯利·麦格尼格尔
  4. linux下安装blas和lapack
  5. vue中created、mounted、activated的区别
  6. 华为ensp 启动ar设备失败,错误代码 :40
  7. 一文了解游戏美术开发流程,以及可能遇到的问题
  8. matlab 按字母排序,matlab命令大全(按字母排序) 总汇详解最新发布完整珍藏版
  9. C# Windows桌面应用 ---- 实例:文件读写
  10. MSCKF 2.0 理论推导以及能观性分析