关于宏定义解决办法
关于宏定义
#define MMC_SD_PORT_INI {\
MMC_SD_CS_PORT |= 1<<MMC_SD_CS_BIT;\
MMC_SD_SCK_PORT |= 1<<MMC_SD_SCK_BIT;\
MMC_SD_MOSI_PORT |= 1<<MMC_SD_MOSI_BIT;\
MMC_SD_MISO_PORT |= 1<<MMC_SD_MISO_BIT;\
\
MMC_SD_CS_DDR |= 1<<MMC_SD_CS_BIT;\
MMC_SD_SCK_DDR |= 1<<MMC_SD_SCK_BIT;\
MMC_SD_MOSI_DDR |= 1<<MMC_SD_MOSI_BIT;\
MMC_SD_MISO_DDR &= ~(1<<MMC_SD_MISO_BIT);\
}
然后在主函数中调用MMC_SD_PORT_INI; /* Port Initialize */
这个是什么意思呢,谁可以回答一下吗?谢谢。。。
------解决方案--------------------
这就是宏定义,定义了MMC_SD_PORT_INI 为后面大括号里面的所有东西。
因为define后面的内容是多条语句,如果要分行写必须用“\”连接。而且很多编译器规定“\”后面不能有任何字符包括空格,否则编译报错。
类似于下面函数的功能,但是没有函数的调用以及出栈入栈的开销:
void MMC_SD_PORT_INI(void)
{MMC_SD_CS_PORT |= 1<<MMC_SD_CS_BIT;
MMC_SD_SCK_PORT |= 1<<MMC_SD_SCK_BIT;
MMC_SD_MOSI_PORT |= 1<<MMC_SD_MOSI_BIT;
MMC_SD_MISO_PORT |= 1<<MMC_SD_MISO_BIT;
MMC_SD_CS_DDR |= 1<<MMC_SD_CS_BIT;
MMC_SD_SCK_DDR |= 1<<MMC_SD_SCK_BIT;
MMC_SD_MOSI_DDR |= 1<<MMC_SD_MOSI_BIT;
MMC_SD_MISO_DDR &= ~(1<<MMC_SD_MISO_BIT);
}
------解决方案--------------------
同意楼上的说法。补充一下,每种编译器宏定义的规范不一样,建议详细了解下所用编译器所支持平台的C语言规范。
------解决方案--------------------
PORT一般是并行端口,8/16位居多。
MMC_SD_CS_PORT |= 1<<MMC_SD_CS_BIT;
意思是在不改变MMC_SD_CS_PORT中其它各比特的情况下,将其第MMC_SD_CS_BIT置1。
例如,MMC_SD_CS_BIT=3,移位3次,则1<<MMC_SD_CS_BIT=00001000B,即第3位(从0位数起)等于1了。
从字符的意思看,用SPI访问SD端口。前4句是将SPI端口的4条线置1;后4句是,将另一个端口的3条线置1,一条线置0。
------解决方案--------------------
#define MMC_SD_PORT_INI {\
MMC_SD_CS_PORT |= 1<<MMC_SD_CS_BIT;\
MMC_SD_SCK_PORT |= 1<<MMC_SD_SCK_BIT;\
MMC_SD_MOSI_PORT |= 1<<MMC_SD_MOSI_BIT;\
MMC_SD_MISO_PORT |= 1<<MMC_SD_MISO_BIT;\
\
MMC_SD_CS_DDR |= 1<<MMC_SD_CS_BIT;\
MMC_SD_SCK_DDR |= 1<<MMC_SD_SCK_BIT;\
MMC_SD_MOSI_DDR |= 1<<MMC_SD_MOSI_BIT;\
MMC_SD_MISO_DDR &= ~(1<<MMC_SD_MISO_BIT);\
}
然后在主函数中调用MMC_SD_PORT_INI; /* Port Initialize */
这个是什么意思呢,谁可以回答一下吗?谢谢。。。
------解决方案--------------------
这就是宏定义,定义了MMC_SD_PORT_INI 为后面大括号里面的所有东西。
因为define后面的内容是多条语句,如果要分行写必须用“\”连接。而且很多编译器规定“\”后面不能有任何字符包括空格,否则编译报错。
类似于下面函数的功能,但是没有函数的调用以及出栈入栈的开销:
void MMC_SD_PORT_INI(void)
{MMC_SD_CS_PORT |= 1<<MMC_SD_CS_BIT;
MMC_SD_SCK_PORT |= 1<<MMC_SD_SCK_BIT;
MMC_SD_MOSI_PORT |= 1<<MMC_SD_MOSI_BIT;
MMC_SD_MISO_PORT |= 1<<MMC_SD_MISO_BIT;
MMC_SD_CS_DDR |= 1<<MMC_SD_CS_BIT;
MMC_SD_SCK_DDR |= 1<<MMC_SD_SCK_BIT;
MMC_SD_MOSI_DDR |= 1<<MMC_SD_MOSI_BIT;
MMC_SD_MISO_DDR &= ~(1<<MMC_SD_MISO_BIT);
}
------解决方案--------------------
同意楼上的说法。补充一下,每种编译器宏定义的规范不一样,建议详细了解下所用编译器所支持平台的C语言规范。
------解决方案--------------------
PORT一般是并行端口,8/16位居多。
MMC_SD_CS_PORT |= 1<<MMC_SD_CS_BIT;
意思是在不改变MMC_SD_CS_PORT中其它各比特的情况下,将其第MMC_SD_CS_BIT置1。
例如,MMC_SD_CS_BIT=3,移位3次,则1<<MMC_SD_CS_BIT=00001000B,即第3位(从0位数起)等于1了。
从字符的意思看,用SPI访问SD端口。前4句是将SPI端口的4条线置1;后4句是,将另一个端口的3条线置1,一条线置0。
------解决方案--------------------