打印
[STM32F4]

宏定义 这是怎么了

[复制链接]
1297|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lanseshuijing|  楼主 | 2014-10-30 21:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#define portSET_INTERRUPT_MASK_FROM_ISR() 0;vPortSetInterruptMask()
这条宏定义怎么理解?难道是portSET_INTERRUPT_MASK_FROM_ISR()=0吗? 那分号后面的vPortSetInterruptMask()又是什么意思呢?   搜了一下vPortSetInterruptMask()函数还有实体。
但是在宏调用的时候函数如下
uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); 为什么直接在这个语句下面用大括号呢?
{
if( xTaskIsTaskSuspended( pxTCB ) == pdTRUE )

{
   traceTASK_RESUME_FROM_ISR( pxTCB );

  if( uxSchedulerSuspended == ( unsigned portBASE_TYPE ) pdFALSE )
    {
     xYieldRequired = ( pxTCB->uxPriority >= pxCurrentTCB->uxPriority );
     vListRemove(  &( pxTCB->xGenericListItem ) );
     prvAddTaskToReadyQueue( pxTCB );
    }
else
{
    /* We cannot access the delayed or ready lists, so will hold this
    task pending until the scheduler is resumed, at which point a
    yield will be performed if necessary. */
    vListInsertEnd( ( xList * ) &( xPendingReadyList ), &( pxTCB->xEventListItem ) );
          }
        }
      }
请大师帮忙解释一下
沙发
lanseshuijing|  楼主 | 2014-10-31 09:54 | 只看该作者
自己顶一下 哪位大师帮忙解释一下啊

使用特权

评论回复
板凳
lanseshuijing|  楼主 | 2014-10-31 21:22 | 只看该作者
好心人呢 救救我啊,兄弟郁闷好几天了

使用特权

评论回复
地板
搞IT的| | 2014-11-3 10:35 | 只看该作者
lanseshuijing 发表于 2014-10-31 21:22
好心人呢 救救我啊,兄弟郁闷好几天了

哎呀,我也看的不懂:lol

使用特权

评论回复
5
搞IT的| | 2014-11-3 10:35 | 只看该作者
lanseshuijing 发表于 2014-10-31 21:22
好心人呢 救救我啊,兄弟郁闷好几天了

哎呀,我也看的不懂:lol

使用特权

评论回复
6
joyme| | 2014-11-3 10:58 | 只看该作者
宏定义就是完全替换,用途是让代码看起来整洁、易懂,修改方便(有多个地方调用时,如有改动,只需改定义就好),定义可以为任意语句,当然也可以由多个语句组合,你直接把内容替换进去就好

使用特权

评论回复
7
LOVE_ELEC| | 2014-11-3 11:24 | 只看该作者
uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); 用宏定义替换后变成
uxSavedInterruptStatus = 0;vPortSetInterruptMask();

使用特权

评论回复
8
Progrime| | 2014-11-3 11:28 | 只看该作者
本帖最后由 Progrime 于 2014-11-3 11:34 编辑

宏定义,从第一个空格处分开,到注释处结束,没有注释的到行结束为止,在编译时系统遇到前面的,把后面的拷过去直接换了。
#define portSET_INTERRUPT_MASK_FROM_ISR() 0;vPortSetInterruptMask()
uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
编译时直接替换得:
uxSavedInterruptStatus =  0;vPortSetInterruptMask();
仅此而已,

使用特权

评论回复
9
lanseshuijing|  楼主 | 2014-11-8 12:37 | 只看该作者
Progrime 发表于 2014-11-3 11:28
宏定义,从第一个空格处分开,到注释处结束,没有注释的到行结束为止,在编译时系统遇到前面的,把后面的拷 ...

0;vPortSetInterruptMask()=portSET_INTERRUPT_MASK_FROM_ISR()
那前面的“0;”是什么意思呢?

使用特权

评论回复
10
lanseshuijing|  楼主 | 2014-11-8 12:37 | 只看该作者
LOVE_ELEC 发表于 2014-11-3 11:24
uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); 用宏定义替换后变成
uxSavedInterruptStatu ...

0;vPortSetInterruptMask()=portSET_INTERRUPT_MASK_FROM_ISR()
那前面的“0;”是什么意思呢?

使用特权

评论回复
评论
xlsbz 2014-11-8 12:50 回复TA
8楼是对的。要自信。宏定义就是替换。 
11
xlsbz| | 2014-11-8 12:50 | 只看该作者
楼主要自信。
8楼的完全是对的。
我再拷贝一遍
宏定义,从第一个空格处分开,到注释处结束,没有注释的到行结束为止,在编译时系统遇到前面的,把后面的拷过去直接换了。
#define portSET_INTERRUPT_MASK_FROM_ISR() 0;vPortSetInterruptMask()
uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
编译时直接替换得:
uxSavedInterruptStatus =  0;vPortSetInterruptMask();
仅此而已,

使用特权

评论回复
12
xlsbz| | 2014-11-8 12:51 | 只看该作者
大括号就是大括号。写代码的人要套括号 我也没办法。
你想再多套一个也行。

使用特权

评论回复
13
lanseshuijing|  楼主 | 2014-11-8 14:26 | 只看该作者
xlsbz 发表于 2014-11-8 12:50
楼主要自信。
8楼的完全是对的。
我再拷贝一遍

谢谢你朋友   明白了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

93

主题

749

帖子

4

粉丝