标题: UCOSIII操作系统printf函数的疑问 [打印本页]

作者: 最后一个夏天1    时间: 2022-11-28 16:35
标题: UCOSIII操作系统printf函数的疑问
大家好,小弟刚接触操作系统,今天在学习原子哥的UCOSIII信号量与互斥信号量(上)的时候,视频举了一个直接访问共享内存不加锁的例子,具体的代码的和现象见下图。我不明白任务1的优先级比任务2的优先级高,且printf前没有任务调度函数,不应该任务1的printf执行完,到延时1s的时候才会发生调度吗?为什么会出现这个现象。大佬们可以大致描述一下程序运行过程吗?

捕获.PNG (37.02 KB, 下载次数: 54)

任务1

任务1

捕获2.PNG (38.3 KB, 下载次数: 55)

任务2

任务2

捕获3.PNG (108.23 KB, 下载次数: 55)

函数

函数

作者: Hephaestus    时间: 2022-11-29 04:24
任务1的printf确实执行了,但是printf之前有delayms,这期间执行任务2的memcpy把任务1的数据覆盖掉了,所以你以为并没有执行。
作者: 最后一个夏天1    时间: 2022-11-29 08:36
Hephaestus 发表于 2022-11-29 04:24
任务1的printf确实执行了,但是printf之前有delayms,这期间执行任务2的memcpy把任务1的数据覆盖掉了,所以 ...

谢谢大佬,我明白了,我以为delay_ms()不会触发任务切换,OSTimeDlyHMSM才会
作者: Hephaestus    时间: 2022-11-29 21:19
最后一个夏天1 发表于 2022-11-29 08:36
谢谢大佬,我明白了,我以为delay_ms()不会触发任务切换,OSTimeDlyHMSM才会

那种傻等式delay_ms()确实不会触发任务调度,但是STM32上面不太可能用傻等,可能会调用systick中断一类的方式,就很可能触发任务调度了。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1