Cortex-M 开发中实现stdout(printf, puts, putc)

在Cortex-M嵌入式开发中,为了在没有标准输出设备的情况下进行调试,通常需要将stdout重定向到串口或USB。本文介绍了如何使用armcc和Microlib以及gcc和Newlib-Nano来实现printf、puts和putc功能,并提供了针对STM32的示例代码,强调了配置外设和处理浮点数输出的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Cortex-M 开发中实现stdout(printf, puts, putc)

开发嵌入式程序时,由于没有标准输出设备,通常要把标准库的stdout定向到串口或usb等,用于调试;也就是说,在使用printf,puts,putc
等函数时,要先提供stdout基本功能的实现,标准的printf等会调用用户定义的实现函数作为stdout.

使用armcc和Microlib

  • 实现fputc函数
  • armcc armlink armasm参数中添加--library_type=microlib,或者使用IDE指定

注意:Microlib不支持p记数法和宽字符,也就是%lc,%ls, %a .
示例(基于stm32,定向到USART,需要提前配置好外设):

#ifdef __CC_ARM
int fputc(int ch, FILE *f)
{
    USART_SendData(USART1,(uint8_t)ch);
    while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
    return
### 关于 Ansible Navigator `doc` 命令 `-m stdout` 参数 Ansible Navigator 的 `doc` 命令用于显示有关特定模块、插件或其他组件的文档信息。通过使用 `-m stdout` 参数,可以将输出格式化为纯文本形式以便更清晰地查看相关内容[^2]。 以下是调用 `doc` 命令并设置 `-m stdout` 参数的一个示例: ```bash $ ansible-navigator doc ansible.builtin.copy -m stdout ``` 此命令会展示内置 `copy` 模块的相关文档,并以标准输出的形式呈现给用户。 --- ### Ansible `builtin.copy` 模块介绍 `ansible.builtin.copy` 是一个常用的模块,主要用于在远程主机之间复制文件或内容。它支持多种选项来定义源文件位置、目标路径以及其他属性(如权限模式)。下面是一些常见的参数及其功能说明[^4]: - **src**: 定义要复制的本地文件路径。 - **dest**: 设置目标机器上的保存路径。 - **content**: 如果不需要从本地读取文件,则可以通过该字段直接写入字符串作为新文件的内容。 - **mode**: 可选参数,用来设定目标文件的 Unix 权限位。 - **owner**, **group**: 分别指定了所有权和所属组。 #### 示例 Playbook 使用 `copy` 模块 以下是一个简单的 YAML 文件片段展示了如何利用 `copy` 模块完成基本操作: ```yaml --- - name: Copy example file to remote server hosts: webservers tasks: - name: Ensure the destination directory exists ansible.builtin.file: path: "/var/www/html" state: directory mode: '0755' - name: Copy index.html into place ansible.builtin.copy: src: ./index.html dest: /var/www/html/index.html owner: root group: root mode: '0644' ``` 以上脚本首先确认 `/var/www/html` 存在与否;接着把当前工作目录下的 `index.html` 移动至服务器相应的位置上,同时调整其拥有者及访问控制列表 ACLs[^3]. --- ### 结合实际场景的应用案例 假设我们需要部署一个新的配置文件到多个 Linux 主机当中去,在这种情况下就可以借助上面提到过的工具链实现自动化流程管理。具体步骤如下所示 (伪代码): 1. 创建包含所有待处理节点 IP 地址或者域名在内的动态库存表; 2. 编辑适合业务需求的任务清单即 Playbooks; 3. 执行相关联的操作序列直至结束为止。 最终效果便是每台设备都能获得一致性的初始状态准备就绪等待进一步开发测试活动开展下去啦! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值