当前位置: 首页> 娱乐> 明星 > 研发工程师和开发工程师_百度一下 你就知道首页_搜索引擎优化的主要内容_河南郑州网站推广优化外包

研发工程师和开发工程师_百度一下 你就知道首页_搜索引擎优化的主要内容_河南郑州网站推广优化外包

时间:2025/7/9 7:22:21来源:https://blog.csdn.net/unforgettable2010/article/details/142903081 浏览次数:0次
研发工程师和开发工程师_百度一下 你就知道首页_搜索引擎优化的主要内容_河南郑州网站推广优化外包

目录

一、RTOS操作系统之七大主要通讯方式及定时任务

二、实时操作系统(RTOS)中Event、 Semaphore、 Mutex 、 MessageQueue区别于用法?

1. 事件(Event)

2. 信号量(Semaphore)

3. 互斥锁(Mutex)

4. 消息队列(Message Queue)

总结

三、模组RTOS操作系统--SDK-DEMO


一、RTOS操作系统之七大主要通讯方式及定时任务

  1. ● osThreadId_t:线程ID,用于标识一个线程。

osThreadId_t 用于标识和引用 RTOS 中的一个线程。这个标识符可以在创建线程时获得,并且可以用于后续的操作,例如终止线程、获取线程状态等。

● osTimerId_t:定时器ID,用于标识一个定时器。

osTimerId_t 是实时操作系统(RTOS)中用于标识定时器的类型。sTimerId_t 用于标识和引用 RTOS 中的一个定时器。这个标识符可以在创建定时器时获得,并且可以用于后续的操作,例如启动、停止和删除定时器。

● osEventFlagsId_t:事件标志ID,用于标识一组事件标志。

osEventFlagsId_t 用于标识和引用 RTOS 中的一个事件标志组。这个标识符可以在创建事件标志组时获得,并且可以用于后续的操作,例如设置、清除、等待和读取事件标志。

● osMutexId_t:互斥锁ID,用于标识一个互斥锁。

osMutexId_t 用于标识和引用 RTOS 中的一个互斥锁。这个标识符可以在创建互斥锁时获得,并且可以用于后续的操作,例如获取、释放和删除互斥锁。

● osSemaphoreId_t:信号量ID,用于标识一个信号量。

osSemaphoreRelease 是实时操作系统(RTOS)中用于释放信号量的函数。信号量是一种同步机制,通常用于控制对共享资源的访问或协调多个线程/任务之间的操作。在许多 RTOS 中,例如 FreeRTOS 或者 CMSIS-RTOS,信号量可以用来实现互斥锁、计数信号量等功能。

● osMemoryPoolId_t:内存池ID,用于标识一个内存池。

● osMessageQueueId_t:消息队列ID,用于标识一个消息队列。

osMessageQueueId_t 用于标识和引用 RTOS 中的一个消息队列。这个标识符可以在创建消息队列时获得,并且可以用于后续的操作,例如发送、接收和删除消息队列。

二、实时操作系统(RTOS)中Event、 Semaphore、 Mutex 、 MessageQueue区别于用法?

在实时操作系统(RTOS)中,事件(Event)、互斥锁(Mutex)和消息队列(Message Queue)是常见的同步和通信机制。它们各自有不同的用途和特性,适用于不同的场景。下面是这三种机制的区别和用法:

1. 事件(Event)

定义:事件是一种简单的同步机制,用于通知任务某些条件已经满足或某个操作已经完成。

特点

● 轻量级:事件通常占用较少的系统资源。

● 标志位:可以设置多个标志位,每个标志位代表一个特定的事件。

● 等待/触发:任务可以等待一个或多个事件的发生,而其他任务或中断可以触发这些事件。

用法

● 状态通知:当某个条件发生变化时,可以通过事件来通知相关的任务。

● 超时处理:任务可以等待事件,并设置超时时间,以避免无限期等待。

2. 信号量(Semaphore)

定义:信号量是一种同步机制,用于控制对共享资源的访问。它可以是二值信号量(0 或 1)或计数信号量(非负整数)。

特点

● 资源计数:信号量维护一个计数值,表示可用资源的数量。

● 阻塞/非阻塞:如果信号量计数值为 0,尝试获取信号量的任务会被阻塞,直到有其他任务释放信号量。

● 多任务协调:可以用于协调多个任务之间的操作。

用法

● 资源管理:确保一次只有一个任务可以访问某个资源。

● 任务同步:用于同步多个任务的操作,例如生产者-消费者问题。

3. 互斥锁(Mutex)

定义:互斥锁是一种同步机制,用于保护共享资源,确保同一时间只有一个任务可以访问该资源。

特点

● 独占性:互斥锁确保对共享资源的独占访问。

● 递归性:某些互斥锁支持递归锁定,即同一个任务可以多次获取同一个互斥锁。

● 优先级继承:互斥锁可以配置为支持优先级继承,以防止优先级反转问题。

用法

● 保护共享资源:当多个任务需要访问同一个资源时,使用互斥锁来确保一次只有一个任务可以访问该资源。

● 避免竞争条件:通过互斥锁来避免多任务并发访问导致的数据不一致问题。

4. 消息队列(Message Queue)

定义:消息队列是一种通信机制,用于在任务之间传递数据块(消息)。

特点

● 数据传递:任务可以通过消息队列传递结构化的数据。

● 缓冲区:消息队列通常有一个缓冲区,可以存储多个消息。

● 阻塞/非阻塞:发送和接收消息的操作可以是阻塞的或非阻塞的。

用法

● 任务间通信:当任务需要交换数据时,使用消息队列来传递消息。

● 解耦合:通过消息队列,任务之间的耦合度降低,提高了系统的可维护性和扩展性。

总结

● 事件:用于简单地通知任务某个条件已经满足或某个操作已经完成。

● 信号量:用于控制对共享资源的访问,确保一次只有一个任务可以访问某个资源。

● 互斥锁:用于保护共享资源,确保同一时间只有一个任务可以访问该资源。

● 消息队列:用于在任务之间传递结构化的数据,实现任务间的通信。

选择哪种机制取决于你的具体需求。如果你只需要简单的状态通知,事件可能就足够了;如果你需要控制对共享资源的访问,信号量是一个很好的选择;如果你需要保护共享资源并避免竞争条件,互斥锁会更合适;如果你需要在任务之间传递数据,那么消息队列会更合适。

三、模组RTOS操作系统--SDK-DEMO


void app_os_demo_task(void)
{hal_info_log("[os demo] os task start success");// 创建信号量if (NULL == os_sem_handle){os_sem_handle = osSemaphoreNew(1, 0, NULL);}app_info_log("app_os_demo_func create semaphore success!(2/7)");// 创建定时器if (NULL == os_timer_handle){os_timer_handle = osTimerNew(app_demo_os_timer_callback, osTimerPeriodic, NULL, NULL);osTimerStart(os_timer_handle, (30 * 1000) / portTICK_PERIOD_MS );  // 定时周期单位为tick,此处示例为30s}app_info_log("app_os_demo_func create timer success!(3/7)");// 创建消息队列if (NULL == os_msgqueue_handle){os_msgqueue_handle = osMessageQueueNew(10, sizeof(os_msg_t), NULL); // 消息队列深度为10个,单个元素为结构体大小}app_info_log("app_os_demo_func create message queue success!(4/7)");// 任务函数一定不能自动运行结束,一般是循环处理消息、事件等while (1){// 阻塞等待信号量释放osSemaphoreAcquire(os_sem_handle, osWaitForever);hal_info_log("[os demo] os sem acquire success");hal_info_log("[os demo] os timer count: %d", os_timer_cb_count);app_info_log("app_os_demo_func acquire semaphore success!(5/7)");app_info_log("app_os_demo_func timer arrived!(6/7)");// 阻塞2s等待消息,当接收到消息时立即返回os_msg_t msg = {0};if (osMessageQueueGet(os_msgqueue_handle, &msg, NULL, 2000 / portTICK_PERIOD_MS) == osOK){hal_info_log("[os demo] os get messageid: %d", msg.msg_id);app_info_log("app_os_demo_func message queue get success!(7/7)");}else{hal_info_log("[os demo] os get message timeout");}}
}

关键字:研发工程师和开发工程师_百度一下 你就知道首页_搜索引擎优化的主要内容_河南郑州网站推广优化外包

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: