小编hga*_*abe的帖子

即使没有使用STM32 gcc(arm-none-eabi-gcc)也链接printf

我似乎无法弄清楚为什么有些printf库函数会从libc_nano.a链接到我的代码中,即使我从不使用任何函数printf.它窃取了至少2K宝贵的闪存空间.我能看到的部分_printf_i,_vfprintf_r,_vfiprintf_r在我的链接器映射文件等.

我试过了

  • Wl, - exclude-libs选项
  • 链接描述文件中的EXCLUDE_FILE(..)

这些都不会使符号从地图文件中消失.

我的gcc选项:

CFLAGS = -Og -Wall -g3 -Wdouble-promotion -mcpu=cortex-m0 -mthumb -fmessage-length=0 -ffunction-sections -mfloat-abi=soft -DUSE_HAL_DRIVER

LFLAGS = -mcpu=cortex-m0 -mthumb -mfloat-abi=soft -specs=nosys.specs -specs=nano.specs -Wl,--gc-sections 
Run Code Online (Sandbox Code Playgroud)

arm-none-eabi-gcc.exe(适用于ARM嵌入式处理器的GNU工具)5.2.1 20151202(re lease)[ARM/embedded-5-branch revision 231848] Copyright(C)2015 Free Software Foundation,Inc.这是免费的软件; 查看复制条件的来源.没有保修; 甚至不适用于适销性或特定用途的适用性.

首先,他们为什么要联系起来?有没有办法排除它们?

linker printf gcc arm stm32

5
推荐指数
1
解决办法
1339
查看次数

Eclipse CDT + GNU ARM 中的奇怪包含路径

在修改了一些项目设置(即更改 FPU 类型)后,包含中出现了一些奇怪的条目,例如:

项目/#undef __ARM_NEON

这些不会显示在任何可以指定包含的常用位置(C/C++ 构建 -> 设置 -> 工具设置 -> 编译器 xy -> 包含)。

这个明显无效的包含路径会在“问题”选项卡上创建一条恼人的警告消息。

有时,对 FPU 设置进行更多修改会使这些条目消失,或导致出现更多类似的条目,但我在这里看不到任何逻辑行为。这是一个错误吗?

截屏

eclipse arm gnu

4
推荐指数
1
解决办法
1959
查看次数

MSP430使用msp-gcc的中断例程将无法编译

我正在使用最新的CCS和MSP-GCC编译器.以下代码

#pragma vector=USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
{...isr}
Run Code Online (Sandbox Code Playgroud)

这是TI宣布ISR-s的最新官方支持的方法不起作用,我得到以下编译器消息:

warning: ignoring #pragma vector  [-Wunknown-pragmas]
#pragma vector=USCI_A1_VECTOR
^
error: expected '=', ',', ';', 'asm' or '__attribute__' before 'void'
__interrupt void USCI_A1_ISR(void)
Run Code Online (Sandbox Code Playgroud)

我也尝试过不同的方法,比如:

interrupt(USCI_A1_VECTOR) USCI_A1_ISR(void) {  //code goes here}
Run Code Online (Sandbox Code Playgroud)

这给出了错误:

c:/ti/ccsv6/ccs_base/msp430/include_gcc/msp430f5529.h:5328:33: error: expected declaration specifiers or '...' before '(' token
#define USCI_A1_VECTOR          (47)                     /* 0xFFDC USCI A1 Receive/Transmit */
                                ^
../uart_printf.c:40:11: note: in expansion of macro 'USCI_A1_VECTOR'
interrupt(USCI_A1_VECTOR) USCI_A1_ISR(void)
          ^
Run Code Online (Sandbox Code Playgroud)

这似乎工作:

__attribute__((interrupt(USCI_A1_VECTOR)))
void USCI_A1_ISR(void){ //code goes here }
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?

gcc interrupt msp430

2
推荐指数
1
解决办法
2470
查看次数

标签 统计

arm ×2

gcc ×2

eclipse ×1

gnu ×1

interrupt ×1

linker ×1

msp430 ×1

printf ×1

stm32 ×1