RTEMS 初期化ルーチンでは、以下のコードが表示されます。
void boot_card(const char *cmdline)
{
rtems_interrupt_level bsp_isr_level;
/*
* Special case for PowerPC: The interrupt disable mask is stored in SPRG0.
* It must be valid before we can use rtems_interrupt_disable().
*/
#ifdef PPC_INTERRUPT_DISABLE_MASK_DEFAULT
ppc_interrupt_set_disable_mask( PPC_INTERRUPT_DISABLE_MASK_DEFAULT );
#endif /* PPC_INTERRUPT_DISABLE_MASK_DEFAULT */
/*
* Make sure interrupts are disabled.
*/
(void) bsp_isr_level; // <---
rtems_interrupt_disable( bsp_isr_level );
-- continues--
上記のコードでは、最初に bsp_isr_level が rtems_interrupt_level 型 (最終的に unsigned int として定義される型) として宣言されています。
しかし、ラインは何をしているの(void) bsp_isr_level;
ですか?(上記の //<-- でマークされています)。hereのように関数の引数として渡される変数ではありません。
編集:私の場合、変数は rtems_interrupt_disable 関数によって割り当てられていることがわかりました(実際には#definedマクロです)ので、「使用されていません」ではありません。しかし、割り当てられていますが、割り当てられた値は使用されていないようです。この構文がこのような場合にも使用されるかどうかはわかりません(値は割り当てられていますが、使用されていません)。ところで、RTEMS のソース ツリーに、以下のような void 引数を持つ関数 (実際の関数、#defined ではない) rtems_interrupt_disable があることを発見しました。(cpkit/rtems/src/intrbody.c 内)。(#defined バージョンは cpukit/rtems/include/rtems/rtems/intr.h にあります)
rtems_interrupt_level rtems_interrupt_disable( void )
{
rtems_interrupt_level previous_level;
_ISR_Disable( previous_level );
return previous_level;
}
したがって、この構文は、この 2 番目の定義 (値が void として関数に渡される) の場合に備えて使用された可能性があります。この2番目の定義が存在するため、一部のビルドケースで使用できると思います。