RT-Thread线程实例
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线程实例相关推荐
- rt thread系统下添加wiznet软件包后,不插网线CPU利用率100%问题
rt thread系统下添加wiznet软件包后如果不插网线的话其他任务运行很卡,使用ps命令发现优先级低的任务很多都超时了 rt thread线程错误码 添加了一个可以查看CPU利用率的软件包CPU ...
- 在Android中使用Handler和Thread线程执行后台操作
在 Android中使用Handler和Thread线程执行后台操作 对于线程的控制,我们将介绍一个 Handler类,使用该类可以对运行在不同线程中的多个任务进行排队,并使用Message和Runn ...
- Boost:线程实例
Boost:线程实例 实现功能 C++实现代码 实现功能 boost::thread的测试 C++实现代码 #include <boost/thread.hpp> #include < ...
- android java thread_Android中断并重启一个Thread线程的简单方法
这里简单的总结下(大概思路,没调试,可能会有错!): MyThread.java pulbic class MyThread implemets Thread{ @overide public voi ...
- JAVA笔记 之 Thread线程
线程是一个程序的多个执行路径,执行调度的单位,依托于进程存在. 线程不仅可以共享进程的内存,而且还拥有一个属于自己的内存空间,这段内存空间也叫做线程栈,是在建立线程时由系统分配的,主要用来保存线程内部 ...
- 为什么使用start方法启动Java的Thread线程?
一.简介 在Java代码当中,当我们需要开启子线程去处理一些任务的时候,往往是调用Thread对象的start方法,这样Thread实例中的Runnable对象的run方法就会在一个新的线程当中执行: ...
- 线程实例分析---线程的综合运用(精灵线程,多线程,中断,通信)【java养成】
Java学习打卡:第二十八天 内容导航 Java学习打卡:第二十八天 线程实例分析 Q1:线程与精灵线程的运用 题目内容: 问题分析 Q2:多线程与interrput的应用 题目内容: Q3 模拟买票 ...
- RT Thread之 Uart2 操作
官网连接:https://docs.rt-thread.org/#/rt-thread-version/rt-thread-standard/programming-manual/device/uar ...
- 基于rt thread smart构建EtherCAT主站
我把源码开源到到了gitee,https://gitee.com/rathon/rt-thread-smart-soem 有兴趣的去可以下载下来跑一下 软件工程推荐用vscode 打开.rt thre ...
最新文章
- SAP卢东明:大数据同样需要小身材
- MySQL DISTINCT:去重(过滤重复数据)
- MySQL数据操作(DML)详解(小白都能懂欧)
- Clickhouse Engine kafka 将kafka数据同步clickhouse
- Linux 7 cmake:curses library not found
- java GUI怎么输入_在Swing中创建Java GUI以进行表单输入
- NEERC2017 Archery Tournament 线段树 新套路
- Ubuntu 免密登录
- 小汤学编程之JAVA基础day06——面向对象(一):类与对象
- 服务注册发现方案需求调研
- java去0,Java如何处理除零?
- 十六进制和字符串的转换
- 《Redis视频教程》(p6)
- 360安全卫士团队版or企业版卸载
- [EMNLP 2022] VIRT: Improving Representation-based Text Matching via Virtual Interaction
- 宋鸿兵 - 货币战争5(2014年3月20日)
- 汽车区域控制器的关键技术和MCU解决方案深度分析
- 建设GSM900/1800双频网应考虑的几个问题(转)
- 统计找出一千万以内,一共有多少质数
- 2020-07-03
热门文章
- 顶点缓冲区与着色器 (The Cherno + LeranOpenGL)笔记
- 机器指令和微指令的关系
- 总结 and 读后感之自控力 By 凯利·麦格尼格尔
- linux下安装blas和lapack
- vue中created、mounted、activated的区别
- 华为ensp 启动ar设备失败,错误代码 :40
- 一文了解游戏美术开发流程,以及可能遇到的问题
- matlab 按字母排序,matlab命令大全(按字母排序) 总汇详解最新发布完整珍藏版
- C# Windows桌面应用 ---- 实例:文件读写
- MSCKF 2.0 理论推导以及能观性分析