CodeWarrior v5.x/MC9S12(X)怎么使用标准输入输出
在CodeWarrior下是无法直接使用标准输入输出的,想来原因也很简单,单片机又没有控制台,而不同的单片机的各个端口又不同,编译器怎么知道到底往哪里printf、getchar、putchar……。
为了解决这个问题,CodeWarrior提供的标准库实现中的标准输入和输出实际上分别调用了TERMIO_GetChar 和TERMIO_PutChar这两个函数,这两个函数要求用户实现。函数原型如下:
// 从终端通道接收一个字符
// 返回:从终端通道接收到的字符
char TERMIO_GetChar(void);
// 发送一个字符到终端通道
// 参数:ch 要发送到终端通道的字符
void TERMIO_PutChar(char ch);
所以为了使用我们在学C语言时用的很开心的那几个函数。我们得按需求自己实现这两函数。
示例使用了我自己写的SCI模块把SCI0作为终端通道:
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#include <stdio.h>
#include "SCI_def.h"
void TERMIO_PutChar(char ch){
SCI_PutChar(SCI0,(unsigned char)ch);
}
char TERMIO_GetChar(void){
return SCI_GetChar(SCI0);
}
void main(void) {
int c;
// 使能SCI0
SCI_Init(SCI0);
SCI_EnableTrans(SCI0);
SCI_EnableRecv(SCI0);
printf("type something:\r");
for(;;) {
// 接收字符并回显
c = getchar();
putchar(c);
}
}
之所以使用SCI0是因为仿真中的终端窗口用的就是SCI0,演示起来比较方便hhh
ps:其实本来我编嵌入式不用标准输入输出的,但有些库是默认使用标准输出的,所以稍微研究了下。