找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 901|回复: 3
打印 上一主题 下一主题
收起左侧

UCOSIII操作系统printf函数的疑问

[复制链接]
跳转到指定楼层
楼主
ID:646520 发表于 2022-11-28 16:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,小弟刚接触操作系统,今天在学习原子哥的UCOSIII信号量与互斥信号量(上)的时候,视频举了一个直接访问共享内存不加锁的例子,具体的代码的和现象见下图。我不明白任务1的优先级比任务2的优先级高,且printf前没有任务调度函数,不应该任务1的printf执行完,到延时1s的时候才会发生调度吗?为什么会出现这个现象。大佬们可以大致描述一下程序运行过程吗?

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

任务1

任务1

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

任务2

任务2

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

函数

函数
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:883242 发表于 2022-11-29 04:24 | 只看该作者
任务1的printf确实执行了,但是printf之前有delayms,这期间执行任务2的memcpy把任务1的数据覆盖掉了,所以你以为并没有执行。
回复

使用道具 举报

板凳
ID:646520 发表于 2022-11-29 08:36 | 只看该作者
Hephaestus 发表于 2022-11-29 04:24
任务1的printf确实执行了,但是printf之前有delayms,这期间执行任务2的memcpy把任务1的数据覆盖掉了,所以 ...

谢谢大佬,我明白了,我以为delay_ms()不会触发任务切换,OSTimeDlyHMSM才会
回复

使用道具 举报

地板
ID:883242 发表于 2022-11-29 21:19 | 只看该作者
最后一个夏天1 发表于 2022-11-29 08:36
谢谢大佬,我明白了,我以为delay_ms()不会触发任务切换,OSTimeDlyHMSM才会

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表