完善资料让更多小伙伴认识你,还能领取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条信息,明显超出了物理极限。 你看看是不是晶振没焊好,或者换个串口助手试试 |
|
|
|
|
只有小组成员才能发言,加入小组>>
1022 浏览 1 评论
1852 浏览 0 评论
1833 浏览 1 评论
3258 浏览 5 评论
3585 浏览 9 评论
1024浏览 1评论
1851浏览 1评论
如何知道嵌入式电子控制单元 (ECU) 中的RAM使用情况?
1361浏览 1评论
1853浏览 0评论
1179浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 09:24 , Processed in 1.088345 second(s), Total 80, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1819