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

请人做网站合同服装外贸erp

请人做网站合同,服装外贸erp,青岛网络优化推广公司,建筑模板使用寿命多久【RT-thread studio 下使用STM32F103-学习sem-信号量-初步使用-线程之间控制-基础样例】 1、前言2、环境3、事项了解#xff08;1#xff09;了解sem概念-了解官网消息#xff08;2#xff09;根据自己理解#xff0c;设计几个使用方式#xff08;3#xff09;不建议运行… 【RT-thread studio 下使用STM32F103-学习sem-信号量-初步使用-线程之间控制-基础样例】 1、前言2、环境3、事项了解1了解sem概念-了解官网消息2根据自己理解设计几个使用方式3不建议运行中反复删除在运行线程。 4、实验过程实验说明1、第一部分实验1实验说明-创建工程2编写代码3验证结果 2、第二部分实验1实验说明2编写代码3验证结果 3、第三部分实验1实验说明2编写代码3验证结果 5、代码链接6、细节部分1、dome 文件报错 7、总结 1、前言 最近在使用rt-thread的时候想要用一个线程控制另一个线程的暂停与运行 但看资料的时候发现删除线程和重启线程的时候好像不太理想这么弄是容易出现问题的但通过信号量的方式比较好所以这次咱们一起来学习下sem。 自己也从新手的角度一点点学习。整个rt-thread 还是挺大的不是深耕多年很难面面聚到不过用那学哪里。 2、环境 3、事项了解 1了解sem概念-了解官网消息 大概看了一遍整个资料还是挺多的当你想要使用的时候其实多少还是有些摸不到头脑的。 但既然要使用Rt-thread的官方的文档还是要读一下。 链接https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/ipc1/ipc1?id%e4%bf%a1%e5%8f%b7%e9%87%8f 2根据自己理解设计几个使用方式 我们使用某种RT-thread带有的功能是为了解决我们自己出现的问题。 设计实验1 通过使用sem信号量当一个线程先运行后再运行另一个线程。这样其实就是让线程之间形成先后关系适合一定是某个线程完成后在运行另一个线程。 设计实验2 通过使用sem信号量用一个线程或者一个变量控制或者暂停另一个线程。这样其实就是有个主线程或不一定是主线程可以控制其他线程运行。 以上都是小的功能模块但是大的项目都是小模块一点点搭建起来这算是其中一个砖块使用的时候根据自己情况再调整下。 3不建议运行中反复删除在运行线程。 在看网上资料是看到有说到其实不建议反复挂起或删除创建线程很容易出现问题。 当时看到了资料忘记去哪里不过本片将有关sem信号量的。 4、实验过程 实验说明 1、第一部分实验 万事皆有要基础一步一个脚印如果环境不能使用的话后续代码都是无用的所以第一步是要搭建一个可以运行的程序。自己这块没注意认为软件装好后随便创建一个工程就可以运行没想到卡了一下。 1实验说明-创建工程 2编写代码 以下内容RT-Thread Studio工具会自动生成的。 int main(void) {int count 1;while (count){LOG_D(Hello RT-Thread!);rt_thread_mdelay(1000);}return RT_EOK; }3验证结果 这块其实遇到一个内存相关报错更细节部分可以看细节说明部分。 上述问题解决后然后连接硬件代码进行下载验证。 2、第二部分实验 1实验说明 此部分主要是让一个线程先运行运行完毕再运行了另一个线程。在现实应用中很多情况下都是需要的并且有实际意义的。 举个例子现实中有很多测温需求温度过高过低都需要做些事情相当触发异常这个时候温度异常必须先出现才做后面事情可以用这样逻辑解决。 2编写代码 /** Copyright (c) 2006-2024, RT-Thread Development Team** SPDX-License-Identifier: Apache-2.0** Change Logs:* Date Author Notes* 2024-06-21 RT-Thread first version*/#include rtthread.h#define DBG_TAG main #define DBG_LVL DBG_LOG #include rtdbg.h//第一步 //#include rtthread.hstatic rt_sem_t sem; // 信号量//第二步 void sem1_init(void) {// 创建一个信号量初始值为 0sem rt_sem_create(sem, 0, RT_IPC_FLAG_FIFO);if (sem RT_NULL){rt_kprintf(create semaphore failed.\n);} } //第三步 void thread1_entry(void *parameter) {while (1){// 尝试获取信号量如果信号量值为 0则线程将被阻塞rt_sem_take(sem, RT_WAITING_FOREVER);rt_kprintf(Thread 1 is running.\n);rt_thread_mdelay(1000); // 模拟线程工作} } //第四步 void thread2_entry(void *parameter) {while (1){rt_thread_mdelay(3000); // 等待 3 秒rt_kprintf(Thread 2 releases semaphore.\n);rt_sem_release(sem); // 释放信号量} }int main(void) {int count 1;//第五步 应用sem1_init();// 创建线程 1rt_thread_t tid1 rt_thread_create(thread1,thread1_entry, RT_NULL,1024, 10, 10);if (tid1 ! RT_NULL)rt_thread_startup(tid1);// 创建线程 2rt_thread_t tid2 rt_thread_create(thread2,thread2_entry, RT_NULL,1024, 10, 10);if (tid2 ! RT_NULL)rt_thread_startup(tid2);while (count){//LOG_D(Hello RT-Thread!);rt_thread_mdelay(1000);}return RT_EOK; }3验证结果 如下为具体实验验证必须是线程2运行完才会运行线程1是按照顺序运行。 3、第三部分实验 1实验说明 这种情况更为复杂些需要一个线程控制另一个线程虽然实现方式很多不一定非要使用这种但是工具给你准备好了使不使用看自己并且是实现比较简单实际项目根据自己需求使用。 2编写代码 简单讲解下本实验中主要是根据a的值来决定是否运行线程1。 /** Copyright (c) 2006-2024, RT-Thread Development Team** SPDX-License-Identifier: Apache-2.0** Change Logs:* Date Author Notes* 2024-06-21 RT-Thread first version*/#include rtthread.h#define DBG_TAG main #define DBG_LVL DBG_LOG #include rtdbg.h//第一步 static rt_sem_t sem; // 信号量 volatile int a 0; // 控制变量//第二步 void sem_init(void) {// 创建一个信号量初始值为 0sem rt_sem_create(sem, 0, RT_IPC_FLAG_FIFO);if (sem RT_NULL){rt_kprintf(create semaphore failed.\n);} } //第三步 void thread1_entry(void *parameter) {while (1){// 尝试获取信号量如果信号量值为 0则线程将被阻塞rt_sem_take(sem, RT_WAITING_FOREVER);rt_kprintf(Thread 1 is running.\n);rt_thread_mdelay(1000); // 模拟线程工作} } //第四步 void thread2_entry(void *parameter) {while (1){rt_thread_mdelay(1000); // 每秒检查一次变量 a 的值if (a 1){// 如果 a 1则释放信号量允许线程 1 运行if (rt_sem_release(sem) RT_EOK){rt_kprintf(Thread 2 releases semaphore.\n);}}else{// 如果 a 0则确保信号量不会释放线程 1 将被暂停rt_kprintf(Thread 2: a is 0, thread 1 will pause.\n);}} }void set_a(int value) {a value;rt_kprintf(Variable a set to %d\n, a); }int main(void) {int count 1;// 初始化信号量sem_init();// 创建线程 1rt_thread_t tid1 rt_thread_create(thread1,thread1_entry, RT_NULL,1024, 10, 10);if (tid1 ! RT_NULL)rt_thread_startup(tid1);// 创建线程 2rt_thread_t tid2 rt_thread_create(thread2,thread2_entry, RT_NULL,1024, 10, 10);if (tid2 ! RT_NULL)rt_thread_startup(tid2);while (count){set_a(0);rt_thread_mdelay(10000);set_a(1);//LOG_D(Hello RT-Thread!);rt_thread_mdelay(10000);}return RT_EOK; }3验证结果 5、代码链接 代码链接https://download.csdn.net/download/qq_22146161/89466496 6、细节部分 1、dome 文件报错 7、总结 一个砖一个砖垒起来。
http://www.ho-use.cn/article/10813779.html

相关文章:

  • 服务周到的微网站建设wordpress怎么修改语言
  • wordpress做采集站家庭办厂3一8万项目
  • 开发一套网站多少钱免费做网站的优缺点
  • 济南自助建站微信小程序商城开源源码
  • 做商城网站企业网络优化
  • 网站开发 岗位职责怎样在网站做友情链接
  • 合肥网站建设cnfg网站更换服务器如何做镜像
  • 阿里巴巴网站备案如何建立淘宝客网站
  • 做空气开关那个网站推广比较好百度推广怎么优化
  • iis7.5部署网站小米网页怎么制作
  • 学校网站建设设想wordpress手机上图片不显示
  • 万基城市建设有限公司网站windows优化大师破解版
  • 唐山市里做网站的保定seo
  • 有哪些网站可以做淘宝客无人区高清免费网页直播
  • 电商网站有哪些功能模块个人简历代写
  • 国外的域名注册网站城乡建设部官方网站
  • 做动效的网站wordpress禁止右键弹出菜单
  • 安徽先锋网站两学一做wordpress学习pdf
  • 查询网站备案密码是什么襄阳市住房和城乡建设局网站
  • 可以做翻译兼职的网站国内好用的五款开源建站系统
  • 去类似美团网站做软件开发wordpress 幻灯片 文章
  • 建网站要什么工做人员重庆景点图片高清图片
  • 网站动画广告条怎么做的正版电子商务网
  • 做网站文案cco网站素材
  • 家用电脑可以做网站服务器wordpress全站静态页面
  • 网站建设51jyoowordpress阅读设置
  • 网站开发手把手阳泉集团网站建设
  • 网站备案 两个域名中职省级示范校建设网站
  • 用阿里云和大淘客做网站wordpress默认登录地址
  • 中国制造网外贸网站南京建设网站需要多少钱