【第五课】《C语言基础》
还是大一那一会学的C语言,因为专业问题C++没有学过,还好用KEIL基本用C就可以了。
一、关于printf
课程讲解了将USB-CDC串口通讯重定向至printf函数,使用LIB库仅需要取消注释即可实现。
使用UART串口的话,我的方法是如下这样,可以封装为一个函数,然后加个串口形参;也可以每个串口写一个。
- //========================================================================
- // 函数: void UART1_printf(char *fmt,...)
- // 描述: 将串口发送函数重定向为UART1_printf
- // 参数: fmt: 字符串指针,其余为可变变量
- // 返回: none.
- //========================================================================
- void UART1_printf(char *fmt,...)
- {
- u32 i,length;
- va_list ap;
- va_start(ap,fmt);
- vsprintf(TX1_Buffer,fmt,ap);
- va_end(ap);
- length=strlen((const char*)TX1_Buffer);
-
- //开始发送数据
- for(i=0;i<length;i++)
- {
- SBUF = TX1_Buffer[i];
- B_TX1_Busy=1;
- while(TI == 0); //忙等待,等待当前字节发送完成
- TI = 0; //清除请求位
- }
- B_TX1_Busy=0;
- }
复制代码
也有大佬直接用printf的,好像用的是啥putchar啥的没注意了解,有知道的大佬可以解释一下。(或许这里我可以宏定义一下? #define printf UART1_printf)
二、关于进制转换
有时候懒着用计算器,可以记住几个常用的简单的16进制和2进制转换:
BIN HEX
0000 0001 0x01
0000 0010 0x02
0000 0100 0x04
0000 1000 0x08
0001 0000 0x10
0010 0000 0x20
0100 0000 0x40
1000 0000 0x80
实际应用中,比如要给P0M0赋值为 1100 0000(这里实际是要把高2位置1而不改变其他位数据),就可以 P0M0 |=(0X80 | 0X40);或者P0M0 |=(0X80 + 0X40);
三、关于变量类型
如果要使用64位变量需要在程序文件申明 #program float64,主要是双精度数据。其他的在USB文件里已经宏定义过了
- typedef bit BOOL;
- typedef unsigned char BYTE;
- typedef unsigned int WORD;
- typedef unsigned long DWORD;
-
- typedef unsigned char u8;
- typedef unsigned int u16;
- typedef unsigned long u32;
-
- typedef unsigned char uchar;
- typedef unsigned int uint;
- typedef unsigned int ushort;
- typedef unsigned long ulong;
-
- typedef unsigned char uint8_t;
- typedef unsigned int uint16_t;
- typedef unsigned long uint32_t;
复制代码
四、关于运算符没啥好说的
|