CodeWarrior v5.x/MC9S12(X)怎么使用printf

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:其实本来我编嵌入式不用标准输入输出的,但有些库是默认使用标准输出的,所以稍微研究了下。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值