mysterywolf

    1. 免费版rt-thread的内核实在差太多。。。 31/15140 嵌入式系统 2022-04-27
      本帖最后由 mysterywolf 于 2022-4-27 11:31 编辑
      freebsder 发表于 2022-4-26 11:30 rtthread我研究不深,多谢指出具体位置。建议rtthread加上挂起别人的支持,作为一个基础平台和支撑平台, ...
      大概率不会的,我特意在文档中仔细写出了rt_thread_suspend不允许挂起其他线程的原因,结果被楼主当做了《balabla》。挂起函数是从通用操作系统中传下来的,对于实时性有硬性要求的操作系统,这种操作非常的危险,不会因为其他RTOS有,RT-Thread就会盲目的去跟风。相反,其他的RTOS例如FreeRTOS并未在文档中提及这种操作的危险性,却被追崇。。。   另外,微软的相关软件中也是对suspend函数/方法有严格的限制, https://devblogs.microsoft.com/oldnewthing/20031209-00/?p=41573 https://github.com/dotnet/csharplang/issues/2421#issuecomment-482799918   RTEMS操作系统论坛中对挂起任务/线程的危险性也有提及,但是我没有具体查验他的手册中是否提及: https://rtems-users.rtems.narkive.com/VMOyyUJE/problem-when-suspending-a-task   > rtthread我研究不深 其实并不是你对rt-thread了解不深,而是对RTOS了解不深。你的定位一直把优先级继承协议和线程挂起绑定在一起是让我很困惑的。任何一款RTOS,优先级继承的概念是互斥量的一个下属分支,而线程挂起这个概念是个更大范围的,可以挂起任何线程,无论这个线程是否使用互斥量与否。楼主大概率是对这块的概念比较混淆。
    2. 免费版rt-thread的内核实在差太多。。。 31/15140 嵌入式系统 2022-04-26
      bigbat 发表于 2022-4-26 12:06 如果高优先级的线程在操作key,这时adc就要等待锁的释放,这样ADC很可能就耽误了下次的采集。对于key这样 ...
      人机交互任务(线程)的优先级设置的过高是没有意义的,人机交互任务和其他任务一个重要的不同是人机交互任务会把人的反应时间也纳入进去。人的反应时间大概在100ms或者小于100ms左右,你把键盘的优先级设置那么高没有意义的。   所以,多任务设计是很重要的,要合理地安排任务的优先级。
    3. 免费版rt-thread的内核实在差太多。。。 31/15140 嵌入式系统 2022-04-26
      freebsder 发表于 2022-4-26 10:19 mysterywolf 发表于 2022-4-26 09:15 线程挂起的操作在实时系统中是非常危险的操作,可能之前楼主在其他 ...
        https://github.com/RT-Thread/rt-thread/blob/master/src/ipc.c#L997 在这里,RT-Thread互斥量支持优先级继承协议。     是否支持挂起和互斥量的优先级继承协议是两个独立的问题,不知道为何你会把这两个问题交织在一起。 上述的线程A、B、C的场景同样适用于消息队列、信号量等其他内核对象。也会导致饥饿的问题。 > freertos就在手册里明确说suspend/resume是 advanced 功能。 所以,freertos的suspend是可以解决饥饿问题的?
    4. 免费版rt-thread的内核实在差太多。。。 31/15140 嵌入式系统 2022-04-26
      freebsder 发表于 2022-4-26 10:05 来,你来给我科普一下rt 哪里实现的优先级继承和反转。国外的东西再不合理,国内也是抄的。 不支持这 ...
      https://github.com/RT-Thread/rt-thread/blob/master/src/ipc.c#L997 在这里,RT-Thread互斥量支持优先级继承协议。不过,挂起和优先级继承这两个问题是独立的,没有交集。
    5. 免费版rt-thread的内核实在差太多。。。 31/15140 嵌入式系统 2022-04-26
      本帖最后由 mysterywolf 于 2022-4-26 09:18 编辑 线程挂起的操作在实时系统中是非常危险的操作,可能之前楼主在其他实时操作系统中用这个功能挺多的,但是要提醒你,不要这么去用。 一般,实时操作系统RTOS是采用基于优先级的抢占式调度方法,辅以同优先级下时间片轮转调度方法,来确保每个线程(任务)的实时性得到保证。大家都遵守一套规则,也就是谁优先级大,谁执行。 但是挂起解挂是一个逆天的存在,这个两个API如果使用上不受限制,会导致其他线程(任务)的饥饿,严重影响系统的实时性。举一个例子: 假设线程A(优先级10)和线程B(优先级20)在共享一块资源,通过互斥量保护。这时,如果线程C(优先级30)突然挂起了线程B,而线程B正在占用这块资源,互斥量迟迟得不到释放,就会导致线程A,也就是这个例子中最高优先级线程迟迟得不到运行,也就是所说的饥饿。 那么为什么优先级继承在这种情况下不起作用呢,因为优先级继承法是针对于基于优先级的抢占式调度方法的下的一种防范措施,而通过挂起解挂函数,已经超出了基于优先级的抢占式调度法的范围。因此优先级继承法是无法处理这种方式的。RT-Thread只不过是把这种有高实时性风险的操作给禁掉了。当然,楼主如果发现某款其他RTOS具备在挂起其他线程的同时,不会出现上述的饥饿情况,欢迎指正。   rt_thread_suspend函数内部里专门对用户给定的参数进行了检查,如果用户企图在其他线程中,直接挂起另一个线程会提示用户。

最近访客

< 1/1 >

统计信息

已有5人来访过

  • 芯积分:14
  • 好友:--
  • 主题:--
  • 回复:5

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言