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的,同样修改文件里的空函数,改成原定义函数,即可