新闻详情

新闻详情

首页 / 资讯中心 / 详情

嵌入式工程师进阶指南:RTOS线程入口参数使用(一)

发布时间:2026/9/2 15:50:05来源:尧图网络
嵌入式工程师进阶指南:RTOS线程入口参数使用(一)
以Rtthread 为例创建一个线程的方法分为两种分别是result rt_thread_init(thread1, thread1, thread1_entry,RT_NULL, thread1_stack[0], sizeof(thread1_stack), 200, 10);或者thread2_ptr rt_thread_create(thread2, thread2_entry,RT_NULL, 512, 250, 25);无论是哪种方法在线程函数入口参数的传入值都是RT_NULL。这代表着传入线程的参数没有使用到所以没有使用此功能。在很多嵌入操作系统都允许向线程函数的入口传递参数可见这个功能是实际有用的。在一些工程开发中这个传递参数还是能够实现非常重要的功能下面将简单介绍一下值向线程下传递和从线程中向上提取值的使用方法。现有一个LCD线程它的工作需要配置参数才能正常的初始化而项目设计要求在LCD线程运行之前通过主线程传递这些参数从而实现主线程对配置参数的全局统一控制而不是由LCD线程在分散在不同的配置文件中去读取。//lcd.h #ifndef APPLICATIONS_LCD_H_ #define APPLICATIONS_LCD_H_ #include board.h #include rtthread.h typedef enum //Font { SONG_STYLE12, SONG_STYLE14, SONG_STYLE16, SONG_STYLE18, SONG_STYLE20, SONG_STYLE22, SONG_STYLE24, SONG_STYLE26, }type_of_font; typedef struct{ uint8_t width_max; uint8_t high_max; type_of_font font; uint16_t font_color; uint16_t bkgd_color; }LcdCfg; void rth_lcd_create(LcdCfg* cfg); #endif /* APPLICATIONS_LCD_H_ */构造出LCD配置参数的结构体并添加到cfg.h下。//cfg.h #ifndef APPLICATIONS_CFG_H_ #define APPLICATIONS_CFG_H_ #include board.h #include rtthread.h #include lcd.h typedef struct{ LcdCfg lcdcfg; //添加其他配置结构体 }Dev_cfg_params; Dev_cfg_params* device_cfg_params_init(void); #endif /* APPLICATIONS_CFG_H_ */#include cfg.h static Dev_cfg_params cfgparams {0}; static void device_lcd_params_init() { cfgparams.lcdcfg.bkgd_color 0xFFFF; cfgparams.lcdcfg.font SONG_STYLE18; cfgparams.lcdcfg.font_color 0XABCD; cfgparams.lcdcfg.high_max 320; cfgparams.lcdcfg.width_max 240; } Dev_cfg_params* device_cfg_params_init() { device_lcd_params_init(); return cfgparams; }回到主线程要求处理以下内容定义配置参数的指针并指向配置参数变量的地址。将配置参数关于LCD的地址传递给LCD线程即可完成任务。//main.c #include cfg.h #include lcd.h #define LED_PIN GET_PIN(I, 8) int main(void) { rt_uint32_t count 1; Dev_cfg_params *params device_cfg_params_init(); rth_lcd_create(params-lcdcfg); rt_pin_mode(LED_PIN, PIN_MODE_OUTPUT); while(count) { rt_thread_mdelay(500); rt_pin_write(LED_PIN, PIN_HIGH); rt_thread_mdelay(500); rt_pin_write(LED_PIN, PIN_LOW); } return RT_EOK; }而在LCD线程中需要做以下处理。//lcd.c #include lcd.h static rt_thread_t rth_lcd RT_NULL; void lcd_handler(void* paramter) { LcdCfg *cfg (LcdCfg*)paramter; rt_kprintf( max width %d font_color %x\n,cfg-width_max,cfg-font_color); while(1) { rt_thread_mdelay(100); } } void rth_lcd_create(LcdCfg* cfg) { rth_lcd rt_thread_create(lcd, lcd_handler, cfg, 1024, 3, 100); rt_thread_startup(rth_lcd); }创建LCD线程的时候传入的线程参数为cfg指针。rth_lcd rt_thread_create(lcd, lcd_handler,cfg, 1024, 3, 100);这是第一步。在线程函数中需要将传递的通用参数paramter转换为LcdCfg的类型这里存在一步重要的类型转换。 LcdCfg *cfg (LcdCfg*)paramter;这是第二步。程序运行后输出信息如下有了配置参数之后既可以正常执行LCD设备的初始化。倘若还有其余的设备需要配置参数都可以通过在Dev_cfg_params结构体中添加内容后通过主线程调用分线程初始化的时候透过线程参数指针传递下来。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

基于NLP与智能排版的文档自动化转换工具Paper2Slides实现详解 2026/9/2 16:53:19

基于NLP与智能排版的文档自动化转换工具Paper2Slides实现详解

简介:Paper2Slides是一款面向科研人员、高校教师及学术汇报者的开源自动化演示文稿生成工具,解决论文内容向高质量幻灯片与学术海报转化耗时费力的痛点,支持PDF、Word、Markdown等多格式输入,结合RAG技术精准提取关键信息并保留原…

阅读更多 →
Unity Android UVC摄像头接入方案:基于libuvc实现USB视频流 2026/9/2 16:53:19

Unity Android UVC摄像头接入方案:基于libuvc实现USB视频流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
基于PyTorch的即用型多语言OCR工具:从原理到实战部署 2026/9/2 16:53:19

基于PyTorch的即用型多语言OCR工具:从原理到实战部署

简介:这是一套面向Python开发者、计算机视觉初学者及毕业设计学生的即用型多语言OCR解决方案,解决多语种文本图像识别与本地化部署难题。资源基于PyTorch构建,集成CRAFT文本检测与CRNN序列识别等主流深度学习技术,支持80余种语言&…

阅读更多 →
遥感语义分割数据集构建实战:从Sentinel-2影像到像素级耕地标注全流程 2026/9/2 16:53:19

遥感语义分割数据集构建实战:从Sentinel-2影像到像素级耕地标注全流程

简介:荷兰耕地语义分割遥感影像数据集是一份面向GIS、农业遥感和深度学习研究者的高质量标注数据,可用于耕地提取、土地覆盖分类及语义分割模型训练。压缩包内共2000个xml标注文件,整体大小约786.99MB,这些文件配合原始遥感影像可…

阅读更多 →
开源模型、Agent工具与垂直应用:AI落地链路与开发实践 2026/9/2 16:53:19

开源模型、Agent工具与垂直应用:AI落地链路与开发实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
CPU-Z重置进程亲和性?解析Windows调度机制与Process Lasso的权限博弈 2026/9/2 16:50:17

CPU-Z重置进程亲和性?解析Windows调度机制与Process Lasso的权限博弈

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞