请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:RM46L852主题中讨论的其他器件:HALCOGEN
工具/软件:
您好、
我正在为 TI Hercules HalCoGen 实现硬件抽象层 。
下面是我需要实现的函数签名:
Mcu_Status_t mcu_spi_blocking_send(Mcu_SpiHandle_t spi, size_t size, uint8_t data[size]);
请注意、虽然实现的数据类型为`uint8_t*`、但 HalCoGen 提供的`spiTransmitData ()`函数 仅接受`uint16_t*`。
为解决此问题、我不得不将数据复制到临时缓冲区:
Mcu_Status_t mcu_spi_blocking_send(Mcu_SpiHandle_t spi, size_t size, uint8_t data[size])
{
// We need to copy the data in the buffer because the TI only accept uint16_t*.
// This stress the stack and this is slow.
uint16_t buffer[256] = {0};
for (size_t i = 0; i < size; i++)
{
buffer[i] = data[i];
}
spi_cs(true);
spiTransmitData(SPI_REG, &g_spi_data_format, size, buffer);
spi_cs(false);
return MCU_SUCCESS;
}
不必要的缓冲副本速度非常慢、并且会使堆栈承受更大的压力、因此我想知道:
有没有更智能的方法可以做到这一点? 可能我缺少可以解决此问题的 HalCoGen 配置?
如果不是、您是否有一个专门使用 uint8_t 的自定义`spiTransmitData`实现的示例?
P.S. 由于 TI RM46 的字节序、我认为我不能简单地将 uint8_t*转换为 uint16_t *。
此致、
Gabriel