And*_*aKo 2 c embedded macros pic mplab-c18
这是我第一次在C中使用宏而我正在尝试替换我通常放入带宏的函数中的大部分代码.这是一个经常使用的中断的一部分,因此我需要尽可能地优化它.阅读完文档后,我发现编译器不支持函数内联,我想避免函数调用开销.
代码本身将数据发送到串行输入并行移位寄存器,据我所知,编写我需要的代码片段没有更短的方法.
我正在使用C18编译器版本3.41和MPLAB X IDE.
所以这是我在函数形式中使用的代码:
void first_one(void)
{
//3 invisible zeroes
LATBbits.LATB1=0; //data set to zero
LATBbits.LATB0=1;//first clock
LATBbits.LATB0=0;
LATBbits.LATB0=1;//second clock
LATBbits.LATB0=0;
LATBbits.LATB0=1;//third clock
LATBbits.LATB0=0;
//end of invisible zeroes
//two visible zeroes
LATBbits.LATB0=1;//first clock
LATBbits.LATB0=0;
LATBbits.LATB0=1;//second clock
LATBbits.LATB0=0;
//end of two visible zeroes
LATBbits.LATB1=1;//Data is now one
LATBbits.LATB0=1;
LATBbits.LATB0=0;
//one
LATBbits.LATB1=0;//Data is now zero
LATBbits.LATB0=1;//first clock
LATBbits.LATB0=0;
LATBbits.LATB0=1;//second clock
LATBbits.LATB0=0;
//after this, everything should be in place
LATBbits.LATB0=1;
LATBbits.LATB0=0;
}
Run Code Online (Sandbox Code Playgroud)
我已将该函数转换为此宏:
#define first_one() { \
\
LATBbits.LATB1=0;\
\
LATBbits.LATB0=1;\
LATBbits.LATB0=0;\
\
LATBbits.LATB0=1;\
LATBbits.LATB0=0;\
\
LATBbits.LATB0=1;\
LATBbits.LATB0=0;\
\
LATBbits.LATB0=1;\
LATBbits.LATB0=0;\
\
LATBbits.LATB0=1;\
LATBbits.LATB0=0;\
\
LATBbits.LATB1=1;\
\
LATBbits.LATB0=1;\
LATBbits.LATB0=0;\
\
LATBbits.LATB1=0;\
^^^ The syntax error is here!
\
LATBbits.LATB0=1;\
LATBbits.LATB0=0;\
\
LATBbits.LATB0=1;\
LATBbits.LATB0=0;\
\
LATBbits.LATB0=1;\
LATBbits.LATB0=0;\
\
}
Run Code Online (Sandbox Code Playgroud)
那么我做错了什么?
更新:我删除了评论,现在在不同的位置出现语法错误.
检查\
令牌后没有空格,有些编译器为此发出编译错误.
归档时间: |
|
查看次数: |
1647 次 |
最近记录: |