在编译时管理C软件配置

时间:2017-08-01 14:55:18

标签: c gcc

我开发了一个名为dataframe的小型库,它接收一个缓冲区,并对其进行编码以进行uart通信。 dataframe的输出传递给uart tx函数的输入。我开发了数据帧作为自己的迷你静态库,因此可以进行单元测试,因此我将回调函数定义为其输出接口。

我的问题是我正在运行期间通过使用一个名为DF_write_cb的函数指针将数据帧的输出挂接到uart tx处理程序,如下所示:

void main(...){
    DF_set_write_callback(Uart_Tx_String, NULL);
    ...
}

void DF_apply_frame(uint8_t* buff, size_t len)
{
    uint16_t calc_fletcher = fletcher16(buff, len);
    buff[len] =   (calc_fletcher>>0) & 0xFF;
    buff[len+1] = (calc_fletcher>>8) & 0xFF;
    len+=2;
    uint8_t s=DF_START_BYTE; 
    DF_write_cb(&s, 1);
    DF_escape_frame(buff, len);
    s=DF_STOP_BYTE;
    DF_write_cb(&s, 1);
}

DF_write_cb指向:

bool OPTIMIZE(O3) Uart_Tx_String(uint8_t* string, size_t string_size)
{
    if(string == NULL || string_size <= 0)
    {
        return true;
    }
    ...
    ...
}

有没有更好的方法来解决这个问题?我知道我希望数据帧在编译时将其处理后的字节传递给什么函数,当然是在链接时。

真的,我正在寻找一种告诉gcc“DF_write_cb()”真的是“Uart_Tx_String()”的方法。如果可能的话,我想避免#define。是否有任何我不知道的配置方法会让编译器或链接器用“Uart_Tx_String”替换“DF_write_cb”?我已经看到一些静态内联的引用,但我不熟悉如何设置它。

0 个答案:

没有答案