链接器报告内联函数的多重定义错误。
我在头文件中有以下代码:
struct Port_Pin
{
volatile uint32_t * port_addr_set_value; //!< Writing the pin value here sets the pin to high.
volatile uint32_t * port_addr_clr_value; //!< Writing the pin value to this port clears the pin to low.
volatile uint32_t * port_addr_read_value; //!< Address to read pin value.
volatile uint32_t * port_addr_enable; //!< Writing the pin value here enables the pin (for reading or writing).
volatile uint32_t * port_addr_disable; //!< Writing the pin value here disables the pin.
volatile uint32_t * port_addr_dir_output; //!< Writing the pin value here sets the pin as an output.
volatile uint32_t * port_addr_dir_input; //!< Writing the pin value here sets the pin as an input.
unsigned int pin_bit_position; //!< Zero based, where position zero is first bit position.
};
inline void
Write_Port_Pin(const struct Port_Pin * p_port,
uint8_t bit)
{
volatile uint32_t * port_addr = 0;
port_addr = ((bit & 1) == 0) ? p_port->port_addr_clr_value
: p_port->port_addr_set_value;
*port_addr = 1 << p_port->pin_bit_position;
return;
}
我将头文件包含在多个源 (.c) 文件中。
我希望将上述函数粘贴在任何调用它的地方。
是否有一种技术可以在包含的每个源文件中没有函数的多个定义? 如果是,请举例说明。
我需要嵌入式平台的性能优化。
当在其他翻译单元中定义函数时,编译器或链接器是否足够智能以内联函数?
我在嵌入式 ARM9 平台上使用 Green Hills 编译器 4.2.4。假设 2000 年之前的 C 语言标准。这是 C 代码而不是 C++。