OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2922|回复: 5

这里的源码是不是有错误哎???

[复制链接]

28

主题

113

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1472
金钱
1472
注册时间
2021-8-10
在线时间
271 小时
发表于 2022-4-21 17:12:16 | 显示全部楼层 |阅读模式
5金钱
标蓝这里的程序:BaseType_t xQueueReceiveFromISR( QueueHandle_t xQueue, void * const pvBuffer, BaseType_t * const pxHigherPriorityTaskWoken ){
BaseType_t xReturn;
UBaseType_t uxSavedInterruptStatus;
Queue_t * const pxQueue = ( Queue_t * ) xQueue;

        uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
        {
                const UBaseType_t uxMessagesWaiting = pxQueue->uxMessagesWaiting;

                /* Cannot block in an ISR, so check there is data available. */
                if( uxMessagesWaiting > ( UBaseType_t ) 0 )
                {
                        const int8_t cRxLock = pxQueue->cRxLock;

                        traceQUEUE_RECEIVE_FROM_ISR( pxQueue );

                        prvCopyDataFromQueue( pxQueue, pvBuffer );
                        pxQueue->uxMessagesWaiting = uxMessagesWaiting - 1;

                        /* If the queue is locked the event list will not be modified.
                        Instead update the lock count so the task that unlocks the queue
                        will know that an ISR has removed data while the queue was
                        locked. */
                        if( cRxLock == queueUNLOCKED )//出队未上锁
                        {
                                if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )
                                {
                                        if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )
                                        {
                                                /* The task waiting has a higher priority than us so
                                                force a context switch. */
                                                if( pxHigherPriorityTaskWoken != NULL )
                                                {
                                                        *pxHigherPriorityTaskWoken = pdTRUE;
                                                }
                                                else
                                                {
                                                        mtCOVERAGE_TEST_MARKER();
                                                }
                                        }
                                        else
                                        {
                                                mtCOVERAGE_TEST_MARKER();
                                        }
                                }
                                else
                                {
                                        mtCOVERAGE_TEST_MARKER();
                                }
                        }
                        else
                        {
                                /* Increment the lock count so the task that unlocks the queue
                                knows that data was removed while it was locked. */
                                pxQueue->cRxLock = ( int8_t ) ( cRxLock + 1 );
                        }

                        xReturn = pdPASS;
                }
                else
                {
                        xReturn = pdFAIL;
                        traceQUEUE_RECEIVE_FROM_ISR_FAILED( pxQueue );
                }
        }
        portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );

        return xReturn;
}
是从这个程序中节选的,我就是感觉条件判断不应该是!=,应该是==,这样这句代码才有意义。

中断捕获.PNG

最佳答案

查看完整内容[请看2#楼]

== NULL 这个指针就是没有分配内存 的,你就不能操作他,只有!= NULL才表示这个指针有内存,才可以给他 赋值(*.. = ...)
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

778

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6681
金钱
6681
注册时间
2017-4-12
在线时间
1254 小时
发表于 2022-4-21 17:12:17 | 显示全部楼层
橘子汁真好喝 发表于 2022-4-21 19:08
我读这个freertos源码,这里有点小疑问

== NULL 这个指针就是没有分配内存 的,你就不能操作他,只有!= NULL才表示这个指针有内存,才可以给他 赋值(*.. = ...)
回复

使用道具 举报

10

主题

778

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6681
金钱
6681
注册时间
2017-4-12
在线时间
1254 小时
发表于 2022-4-21 19:01:12 | 显示全部楼层
用这个表情来代替回复
11.png
回复

使用道具 举报

28

主题

113

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1472
金钱
1472
注册时间
2021-8-10
在线时间
271 小时
 楼主| 发表于 2022-4-21 19:08:15 | 显示全部楼层
245925587 发表于 2022-4-21 19:01
用这个表情来代替回复

我读这个freertos源码,这里有点小疑问
回复

使用道具 举报

28

主题

113

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1472
金钱
1472
注册时间
2021-8-10
在线时间
271 小时
 楼主| 发表于 2022-4-21 20:23:54 | 显示全部楼层
245925587 发表于 2022-4-21 19:45
== NULL 这个指针就是没有分配内存 的,你就不能操作他,只有!= NULL才表示这个指针有内存,才可以给他  ...

悟了悟了,非常感谢您
回复

使用道具 举报

1

主题

12

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2020-10-25
在线时间
8 小时
发表于 2022-4-22 10:46:35 | 显示全部楼层
NULL空指针!
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 18:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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