Tag: cmsis

在链接期间,库中的弱符号可以解决吗?

我的场景是关于交叉编译到Arduino Due(ARM目标),但我想这是一个通用的C弱符号问题。 我想将我的固件分成3个部分:1。硬件库(CMSIS,中间件) – > libHardware.a 2.实时操作系统库 – > libOS.a 3.应用程序代码 – > Output.elf链接到上面。 引用的CMSIS实现已声明如下: void SysTick_Handler ( void ) __attribute__ ((weak, alias(“Dummy_Handler”))); // …and a few dozen IRQ handler hook skipped for brevity CMSIS设计的想法是让应用程序代码有选择地实现和处理一些IRQ。 nm报告了libHardware.a startup_sam3xa.o: 00000000 W SysTick_Handler … 在我的场景中,我想在libOS.a中实现这些IRQ处理程序。 我实现了void SysTick_Handler(void),nm报告: cortex_handlers.o: 00000000 T SysTick_Handler …. 然后我将它们连接在一起,这基本上归结为 g++ -o app.elf -Wl,–start-group app.o […]

在core_cm4.h上为什么会像((uint32_t)(int32_t)IRQn那样)?

在core_cm4.h的以下代码中,为什么会有双重转换((uint32_t)(int32_t)IRQn) ? 例如,在以下function中: __STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) { NVIC->ISER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); } 这样做的目的是什么?