![]() |
1
3
您可能提供的有关目标环境的详细信息太少。 通常,当使用RTOS时,您可以禁用中断,以便调度程序和中断服务例程都不会运行,或者您可以应用任务锁定,以便调度器不会运行,但ISR将继续运行。通过将任务的优先级提高到最高优先级,可以实现与任务锁定相同的效果。 如果你不使用和RTOS(或没有操作系统),你通常无法控制调度,但如果你的线程运行时没有让步(即调用导致线程等待的函数),而其他线程和进程不需要太多周期,你的线程将获得几乎所有的CPU。例如,如果您没有运行其他处理器密集型任务,Windows中的繁忙循环在大多数情况下都会显示为任务监视器中一个核心的100%使用情况。如果你的处理器有多个核心,你必须以某种方式并行化任务,使其使用所有核心。 I/O调用通常会导致线程阻塞,因此您对“保存”结果的要求可能会导致问题。解决方案是将结果缓冲在内存中(直接或作为队列或写缓存),并将输出推迟到所有计算完成。 |
![]() |
2
0
操作系统处理CPU专用性。大多数时候,如果你的程序需要更多的电源,它会得到它,但更高优先级(在Linux中是“不错的”)的进程在CPU时间请求的队列中会更高。 |
![]() |
3
0
嗯,这在很大程度上取决于项目的上下文,以及处理器上运行的其他任务是什么。 考虑一下这些 两个例子 : 1/处理器只做 一些优先级较低的工作 ,比如说,在USB、CAN、SPI或任何你拥有的通信中,你在计算过程中都不在乎(处理密集型任务),例如,因为通信层等待这个任务的输出。然后,您可以(静态或动态地,取决于您的操作系统)将 非常高的优先级 。您也可以通过任何可用的同步来停止其他任务(消息、任务暂停…) 2/处理器正在运行 高优先级工作 ,甚至是较小的(看门狗、监管、测量),因此您可以分配任务 优先级较低 因为它需要剩余的微处理器功率,这就足够了! 所以,也许你会有关于如何为任务分配优先级的问题。。。但这一切都取决于你的固件体系结构,以及你在操作系统还是手动的大“主”之间做出的选择! 如果您需要准确的答案,请提供更多详细信息。 |
![]() |
4
0
删除所有不必要的过程。 关闭此进程或其他进程导致的每个磁盘访问和其他阻塞IO。如果你必须这样做,那就晚一点做,批处理。在并行线程中使用多个内核,并设置CPU到进程或内核到进程的相关性可能会有所帮助——最后一个可能是特定于操作系统的。 将流程设置为高优先级,以便获得更大的份额。 |
![]() |
conopizda2 · 为什么我的静态数组没有被memset清除? 2 年前 |
![]() |
jhe4x · C按位OR返回的值不正确 2 年前 |
![]() |
Tim · 如何用c语言打印程序的执行流程# 6 年前 |
![]() |
jatinBatra · 关于嵌入式固件开发[已关闭] 6 年前 |
![]() |
Will · 嵌入链接器脚本-是否正确放置“堆栈”和“堆”区域? 6 年前 |
![]() |
K. Crow · 不等于PIC32上启用中断时操作员不工作[关闭] 6 年前 |
![]() |
spiff42 · 清除位时唯一的最大不同字节值集 6 年前 |