当前位置: 首页 > web >正文

入职学习记录-RT-thread实时操作系统_1

线程的定义

        创建线程首先要定义线程栈,在裸机系统中全局变量,局部变量及函数的返回值等都放在栈(栈是单片机RAM里一段连续的内存空间)中,且可以在启动文件里更改栈的大小。但对于多线程系统,每个线程是独立互不干扰的,因此需要为其分别分配栈空间,其他内容见代码注释。

extern rt_list_t rt_thread_priority_table[RT_THREAD_PRIORITY_MAX];//线程优先级表
ALIGN(RT_ALIGN_SIZE);    //设置变量以多少个字节对齐,默认为4
rt_uint8_t rt_flag1_thread_stack[512]; 
rt_uint8_t rt_flag2_thread_stack[512];struct rt_thread rt_flag1_thread;  //线程控制块
struct rt_thread rt_flag2_thread;/* 线程声明 */
void flag1_thread_entry(void *p_arg);
void flag2_thread_entry(void *p_arg);struct rt_thread
{void *sp; /* 线程栈指针 */void *entry; /* 线程入口地址,也是线程函数名*/void *parameter; /* 线程形参 */void *stack_addr; /* 线程起始地址 */rt_uint32_t stack_size; /* 线程栈大小,单位为字节 */rt_list_t tlist; /* 线程链表节点 */ 
};rt_thread_init( &rt_flag1_thread, /* 线程控制块 */flag1_thread_entry, /* 线程入口地址 */RT_NULL, /* 线程形参 */&rt_flag1_thread_stack[0], /* 线程栈起始地址 */sizeof(rt_flag1_thread_stack) ); /* 线程栈大小,单位为字节 */rt_list_insert_before( &(rt_thread_priority_table[0]),&(rt_flag1_thread.tlist) );/* 将线程插入到就绪列表 */rt_thread_init( &rt_flag2_thread, /* 线程控制块 */flag2_thread_entry, /* 线程入口地址 */RT_NULL, /* 线程形参 */&rt_flag2_thread_stack[0], /* 线程栈起始地址 */sizeof(rt_flag2_thread_stack) ); /* 线程栈大小,单位为字节 */
};
rt_list_insert_before( &(rt_thread_priority_table[1]),&(rt_flag2_thread.tlist) );rt_system_scheduler_start();//启动系统调度器/* 线程 1 */
void flag1_thread_entry( void *p_arg )
{for( ;; ){flag1 = 1;delay( 100 );flag1 = 0;delay( 100 );}
}/* 线程 2 */
void flag2_thread_entry( void *p_arg )
{for( ;; ){flag2 = 1;delay( 100 );flag2 = 0;delay( 100 );}
}

上述简单认识了一下线程的各个成员的用途以及相关函数如何使用,未完待续...
      

        

http://www.xdnf.cn/news/2317.html

相关文章:

  • Android HAL HIDL
  • C语言:数据的存储
  • matplotlib画图工具使用(1) 画折线统计图python代码
  • 【教学类-102-19】蝴蝶三色图作品1——卡纸蝴蝶(滴颜料按压对称花纹)A4横版最大号22.85CM
  • 如何在学习通快速输入答案(网页版),其他学习平台通用,手机上快速粘贴
  • 时间序列成像之点对称模式(Symmetrized Dot Pattern,SDP)
  • 【2025 最新前沿 MCP 教程 04】通信渠道:理解 MCP 传输机制
  • ShenNiusModularity项目源码学习(22:ShenNius.Admin.Mvc项目分析-7)
  • 【深度强化学习 DRL 快速实践】稀疏奖励问题 sparse reward
  • 高中数学联赛模拟试题精选第17套几何题
  • C++中const的应用(1)之const 形参和实参以及成员函数的 const 和重载
  • 从循环角度分析逐位分离法
  • 形象的讲解什么是Gateway网关
  • leetcode110 平衡二叉树
  • Ubuntu 之软件包管理系统
  • 前端技术个人求职简历模板
  • new/delete 重载与对象池实现
  • 高性能电脑系统优化工具Advanced SystemCare PRO v18.3.0.240 解锁永久专业版
  • 学习Spire.Office for Java版本的科学实践
  • 栈与队列 Part 2
  • 【NeurlPS 2024】MAR:无矢量量化的自回归图像生成
  • Jquery -函数调用使用创建立即执行函数
  • 代码随想录回文子序列
  • MQL5教程 06 EA开发实战
  • 【免费项目分享】(项目加说明文档)基于Go语言的城市电动汽车充电桩管理系统设计与实现
  • 深度学习原理与Pytorch实战
  • B. And It‘s Non-Zero
  • 八、Constants(常量)
  • Spring 学习笔记之 @Transactinal实现原理
  • Loki日志体系的搭建