硬汉嵌入式论坛

 找回密码
 立即注册
查看: 790|回复: 1
收起左侧

[IAR] iar 9.3 重定义简单处理

[复制链接]

8

主题

19

回帖

43

积分

新手上路

积分
43
发表于 2022-8-14 23:00:30 | 显示全部楼层 |阅读模式
9.3版本对重定位,不如8版本以下来的简单,看了类似的方法,通过实践,发现更为简单的方法,如下:

1、拷贝C:\Program Files\IAR Systems\Embedded Workbench 9.1\arm\src\lib\file目录下的write.c

     到工程目录

2、加入此文件到工程,可以是main工程文件夹,也可以自己的工程文件夹下,

3、打开此write.c文件,需要改动2个地方,

        a)把原8版本以下的转定义中的函数拷贝到write.c  文件里,具体是;

int fputc(int ch, FILE *f)  // 原重定义,拷贝里面的函数
{
         HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xffff);
         return ch;
}

     原write.c里的函数只有函数名,没有函数体。修改为:

int MyLowLevelPutchar(int ch)  // 原程序里,只有一个函数名称定义,无函数体,修改为如下
{
    HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xffff);
    return ch;
}

   b)把原函数里#if 0 修改为 #if 1   即,函数开头的定义

size_t __write(int handle, const unsigned char * buffer, size_t size)
{
  /* Remove the #if #endif pair to enable the implementation */
#if 1  // 原定义为0,改为1

          size_t nChars = 0;

。。。。。。。。。。。。。。。

同样,如果使用jlink RTT的,同样修改文件里的空函数,改成原定义函数,即可

谢绝转载
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106997
QQ
发表于 2022-8-15 01:23:46 | 显示全部楼层
谢谢楼主分享,

这个我也整理过。

IAR9.X printf串口底层重定向方法,否则提示Linker Error: "no definition for __write"
https://www.armbbs.cn/forum.php? ... 9542&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-14 01:18 , Processed in 0.147305 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表