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

网站要注册为什么公众号开发网站公司

网站要注册为什么,公众号开发网站公司,做优惠券网站,网页界面设计用什么软件在 RTX5(Keil RTX5 实时操作系统) 中,中断服务程序(ISR) 可以调用部分 线程安全(ISR Callable) 的 API 函数,但必须遵循 非阻塞、无优先级反转 的原则。以下是 RTX5 允许在中断中调用…

RTX5(Keil RTX5 实时操作系统) 中,中断服务程序(ISR) 可以调用部分 线程安全(ISR Callable) 的 API 函数,但必须遵循 非阻塞、无优先级反转 的原则。以下是 RTX5 允许在中断中调用的 API 列表(基于 CMSIS-RTOS2 规范):


✅ RTX5 中断中可安全调用的 API

1. 线程管理(Thread Management)

API 函数功能是否可中断调用
osThreadFlagsSet向指定线程发送标志位(用于中断→任务通信)可以
osThreadResume恢复被挂起的线程可以

不可调用osThreadNewosThreadTerminateosThreadSuspend(可能阻塞或影响调度)。


2. 事件标志(Event Flags)

API 函数功能是否可中断调用
osEventFlagsSet设置事件标志(任务可等待)可以
osEventFlagsClear清除事件标志可以

不可调用osEventFlagsWait(会阻塞,只能在任务中调用)。


3. 信号量(Semaphore)

API 函数功能是否可中断调用
osSemaphoreRelease释放信号量(任务可获取)可以
osSemaphoreAcquire获取信号量(不可在中断调用,会阻塞不可以

不可调用osSemaphoreNewosSemaphoreDelete(可能涉及内存分配)。


4. 消息队列(Message Queue)

API 函数功能是否可中断调用
osMessageQueuePut发送消息(非阻塞模式)可以
osMessageQueueGet接收消息(仅限超时=0 时可用⚠️ 部分可调用(仅 timeout=0 时)

不可调用osMessageQueueNewosMessageQueueDelete(可能涉及内存分配)。


5. 内存池(Memory Pool)

API 函数功能是否可中断调用
osMemoryPoolAlloc分配内存(仅限 timeout=0 时可用⚠️ 部分可调用(仅 timeout=0 时)
osMemoryPoolFree释放内存可以

不可调用osMemoryPoolNewosMemoryPoolDelete(可能涉及内存分配)。


6. 定时器(Timer)

API 函数功能是否可中断调用
osTimerStart启动定时器可以
osTimerStop停止定时器可以
osTimerDelete删除定时器不可以(可能涉及内存释放)

不可调用osTimerNew(可能涉及内存分配)。


7. 互斥锁(Mutex) & 递归互斥锁(Recursive Mutex)

API 函数功能是否可中断调用
osMutexRelease释放互斥锁(任务可获取)可以
osMutexAcquire获取互斥锁(不可在中断调用,会阻塞不可以
osRecursiveMutexRelease释放递归互斥锁可以
osRecursiveMutexAcquire获取递归互斥锁(不可在中断调用不可以

不可调用osMutexNewosMutexDelete(可能涉及内存分配)。


❌ RTX5 中断中不可调用的 API

以下 API 绝对不能在中断中调用(会导致系统崩溃或未定义行为):

  • 任何阻塞操作(如 osDelayosSemaphoreAcquireosMutexAcquireosEventFlagsWaitosMessageQueueGet 带超时)。
  • 动态内存分配/释放(如 osThreadNewosTimerNewosMutexNewosMemoryPoolNew)。
  • 线程挂起/删除(如 osThreadSuspendosThreadTerminate)。
  • 系统初始化/关闭(如 osKernelInitializeosKernelStartosKernelLock)。

✅ 中断与任务通信的最佳实践

1. 使用 osThreadFlagsSet(推荐)

// 中断中(非阻塞)
osThreadFlagsSet(task_id, 0x01);  // 向任务发送标志位// 任务中(等待标志位)
uint32_t flags = osThreadFlagsWait(0x01, osFlagsWaitAny, osWaitForever);

2. 使用 osSemaphoreRelease

// 中断中(非阻塞)
osSemaphoreRelease(mySemaphore);  // 释放信号量// 任务中(等待信号量)
osSemaphoreAcquire(mySemaphore, osWaitForever);  // 阻塞等待

3. 使用 osMessageQueuePut

// 中断中(非阻塞)
osMessageQueuePut(myQueue, &data, 0, 0);  // 发送消息(不阻塞)// 任务中(接收消息)
osMessageQueueGet(myQueue, &data, NULL, osWaitForever);  // 阻塞等待

📌 总结

API 类型是否可中断调用备注
osThreadFlagsSet推荐用于中断→任务通信
osSemaphoreRelease任务可 osSemaphoreAcquire 等待
osMessageQueuePut任务可 osMessageQueueGet 等待
osMemoryPoolFree释放内存
osEventFlagsSet设置事件标志
osTimerStart / osTimerStop控制定时器
osMutexRelease释放互斥锁
任何阻塞 APIosDelayosSemaphoreAcquire
动态创建/删除 APIosThreadNewosTimerNew

关键规则

  1. 中断中只能调用非阻塞 API
  2. 避免在中断中分配/释放内存(除非使用静态分配)。
  3. 优先使用 osThreadFlagsSet 或信号量进行中断→任务通信

参考官方文档:https://arm-software.github.io/CMSIS_5/RTOS2/html/group__CMSIS__RTOS__Definitions.html

http://www.dtcms.com/wzjs/15704.html

相关文章:

  • 建设厅培训中心网站长沙网络推广外包
  • 牛网网站建设全自动推广引流软件免费
  • 做湲兔费网站视颍竞价关键词排名软件
  • 阜阳网站开发公司知乎关键词排名优化工具
  • 虚拟机如何做网站搜索优化指的是什么
  • 做海报找背景图有哪些网站微信搜一搜seo优化
  • 深圳个人如何做网站设计合肥关键词排名推广
  • 浦口国家建设部网站宁波seo优化流程
  • 做自己的视频网站网络营销服务
  • 免费模板app下载企业seo排名有 名
  • 建设b2c商城网站湖南网站托管
  • dede网站版权信息西安今日头条新闻消息
  • 做网站服务器系统武汉seo网站推广培训
  • 国外网站为什么不用备案友情链接建立遵循的原则包括
  • 海口的网站建设免费推广渠道有哪些
  • 万网虚拟服务器怎么做网站内容国外免费网站域名服务器查询软件
  • 资料下载网站建设怎么免费给自己建网站
  • 微信开店免费平台seo推广怎么样
  • 自己在百度上可以做网站吗深圳市龙华区
  • 建设网站如入什么费站长之家seo查询官方网站
  • 淄博营销网站建设广州seo推广优化
  • 如何用word做简单的网站市场营销模式有哪些
  • 做直播网站软件有哪些软件有哪些成人短期就业培训班
  • 做问卷用哪个网站新闻软文自助发布平台
  • 南京电商网站开发万网域名官网
  • 做县城门户网站网站怎样优化seo
  • 厦门免费网站建设网站排名怎么搜索靠前
  • 苏州做网站哪家好重庆seo网络推广优化
  • 清远短视频推广东莞搜索优化十年乐云seo
  • 美女图片用网站源码二手交易平台