完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
void vTask1(void *pvParameters){ const char *pcTaskName = "Task 1 is runningrn"; volatile uint32_t ul = 0; for ( ;; ) { vPrintString(pcTaskName);for (ul=0; ul
void vPrintString(const char *pcString){ taskENTER_CRITICAL(); { printf("%s", pcString); fflush(stdout); } taskEXIT_CRITICAL();} 此时,“Task 1 is running”和“Task 2 is running”同时显示。
void vPrintString(const char *pcString){//taskENTER_CRITICAL();{printf("%s", pcString);fflush(stdout);}//taskEXIT_CRITICAL();} 此时,“Task 1 is running”和“Task 2 is running”正常交替显示。 |
|
相关推荐
4个回答
|
|
由于本人没有实际测试,仅仅是猜测,如果错误,还请包涵并指教。
情况1:加临界段,两个任务同时显示在串口上。 情况2:不加临界段,两个任务分时显示在串口上。 请问,这个有什么问题吗?为什么说是错误? 首先,printf是很耗时的,一般以ms为单位。 其次,考虑加临界段情况,也就是在printf的时候关闭中断,在这段时间内,task1和task2陆续都进入就绪态,于是在退出临界段后(此时打开中断),2个任务都讯速进入运行态(时间上有先后,但是这个时间很短)看上去就像同时打印。 |
|
|
|
谢谢解答,为了测试,Task1和Task2采用for循环进行演示,for循环大约会延时7s左右,远远大于临界关中断和开中断的时间。
|
|
|
|
同样是freertos和两个任务同时串口发送队列数据,两个任务优先级相同,为什么串口回来的数据是乱的,比如正常应该串口应该打印是send1,或send2,串口回来的数据是sesend1nd2,是某个任务打断了另一个任务吗?两个相同优先级的任务会发生这种情况吗?
|
|
|
|
不管什么操作系统,用for循环实现的延时都是要独占cpu的,这个时间是不可能省掉的。
所以你这个结果挺奇怪的,本来是7秒发一条信息;加了临界区保护以后反而7秒能发2条信息,明显超出了物理极限。 你看看是不是晶振没焊好,或者换个串口助手试试 |
|
|
|
只有小组成员才能发言,加入小组>>
818 浏览 0 评论
1162 浏览 1 评论
2536 浏览 5 评论
2871 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2720 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1114浏览 3评论
198浏览 2评论
465浏览 2评论
382浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
463浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-29 07:35 , Processed in 1.030916 second(s), Total 87, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号