gpt4 book ai didi

c - 如何在 C 中将一个字节压入缓冲区?

转载 作者:太空宇宙 更新时间:2023-11-04 04:09:40 25 4
gpt4 key购买 nike

我必须通过 I2C 发送一个带有数据像素的缓冲区,但首先,我必须用显示命令用一个额外的字节修补缓冲区。我如何在 C 中执行此操作?

//
// Send a data byte sequence to the GDDRAM
//
static void ssd1306_WriteData(uint8_t *buffer,uint16_t length)
{
uint8_t data[2] = {

CNTRL_BYTE_SEND_DATA, /* 0x40 */

buffer /* this does not work, I try to find a way to combine two buffers */

};

HAL_I2C_Master_Transmit(&SSD1306_I2C_PORT,SSD1306_I2C_ADDR,data,length,timeout);
}

详细来说,我有低级 I2C 函数,它的参数是一个指针 uint8_t 数据,用于通过总线发送的缓冲区和缓冲区的长度。

我想为应用程序软件编写一个函数,应用程序可以通过该函数向显示器发送缓冲区,但首先总线必须向显示 Controller 发送一个数据流即将到来的命令。

我不能两次调用传输,因为这样 Controller 会在总线上发送两次从机地址。

我不想使用memcpy

最佳答案

第一个malloc()具有额外长度的缓冲区。然后使用 memcpy()放置0x40然后复制缓冲区。我总是用字节做一些不同的事情。

volatile uint8_t data[2];
data[0] = address | 0x40; // multibyte write enabled
data[1] = value;

在您的情况下,您需要使用 malloc() & memcpy() ,因为您不确定发送的长度。

另一种解决方案是发送第一个 0x40然后发送缓冲区的其余部分(idk,如果这适用于您的情况)。

或者记住那个额外的字节并执行 buffer | 0x4000其中零的总数是您可以使用 uint32_t variable = 0x40; 轻松制作的偏移量然后 variable << length*2; .使用此方法时,您必须牢记额外的缓冲区长度。

关于c - 如何在 C 中将一个字节压入缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58701130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com