问题描述
- struct dev *address - 它从寄存器结构中读取地址。
- unsigned int bytes- 从寄存器地址读取的数据字节数。
- 例如 - (0x2,1)。 0x2 - 寄存器地址和 1 - 字节数。
i2c_read(struct dev *address,unsigned int bytes)
{
char buff[256];
char *p1 = buff; // Contains a pointer to a buffer of 256 bytes
p1 = func(address,bytes); //values to be stored to the "pointer of a buffer of 256 bytes".
}
- 缓冲区包含要从 func(address,bytes) 存储的值。
int push() //to push the buffer into the stack.
{
//push the buffer to stack here?.
}
我尝试做这样的事情 -
void push(unsigned int *result_buffer)
{
unsigned int *tos,*p1,arr_stack[MAX_SIZE];
//MAX_SIZE is the size of the stack.
tos = arr_stack; /* tos points to the top of stack */
p1 = arr_stack; /* initialize p1 */
printf("\n Simple Stack Example - Pointers");
if (p1 == (tos + MAX_SIZE)) {
printf("\nStatus : Stack Overflow.\n");
} else {
*p1 = *result_buffer;
printf("\nPush Value : %d ",*(p1));
p1++;
}
}
解决方法
您的错误在于 func() 的定义。您需要定义您的功能。假设您有一个 i2c 端口。与它通信的函数应该需要以下内容来完成它的任务:
- i2c 设备的地址。
- 响应中预期的字节数。
- 用于存储响应的缓冲区地址。
返回一个指示操作状态的代码也是明智的,它成功了吗?为什么失败了?
函数的签名应该是,假设错误代码表示为整数:
int i2c_read(struct dev *address,int result_length,unsigned char* result_buffer);
在调用站点,您必须创建一个足够大的缓冲区来存储结果。
如:
// Example: You've just sent read serial command... to read 4 bytes serial #...
unsigned char buffer[4];
if (i2c_read(address,4,buffer) < 0) // buffer decays to a pointer when
// passed to the function.
{
printf("error! failed to read serial # !!!\n");
}
else
{
printf("serial # is: %02x%02x-%02x%02x\n",buffer[0],buffer[1],buffer[2],buffer[3]);
}
你的问题不是很清楚....
通常 I2c 需要发送命令和接收响应。在我见过的大多数 i2c API 中,发送/接收函数的签名是:
int i2c_sendCcommand(WORD addr,int nbytesCommand,const unsigned char* command,int nBytesResponse,unsigned char* response);
// usage:
unsigned char cmdBuffer[] = { 0x43,0x01 };
unsigned char respBuffer[4];
if (i2c_sendCcommand(0x1234,2,cmdBuffer,respBuffer) < 0)
{
printf("error! failed to read serial # !!!\n");
}
else
{
printf("serial # is: %02x%02x-%02x%02x\n",respBuffer[0],respBuffer[1],respBuffer[2],respBuffer[3]);
}