第一题 通过结构体成员得到地址,计算结构体首地址
#include <stdio.h>
#define offsetof(TYPE, MEMBER) ¬_____________________________
#define container_of(ptr, type, member) ({\
const typeof( ((type *)0)->member ) *__mptr = (ptr);\
_________________________________________________ );})
struct test
{
char i ;
int j;
char k;
};
int main(){
struct test temp= {1, 2, 3};
struct test* temp_ptr;
int* j_ptr = &(temp.j);
printf("j 在结构体中的偏移量为:%ld\n", offsetof(struct test, j));
temp_ptr = container_of(j_ptr, struct test, j);
printf("temp 的首地址为%p", temp_ptr);
return 0;
}
第二题 实现一个FIFO
typedef struct {
int readIndex;
int writeIndex;
uint32_t buffer[BUFFER_SIZE];
} FIFO;
static void initFIFO(FIFO *fifo)
{
memset(fifo->buffer, 0, BUFFER_SIZE);
fifo->readIndex = 0;
fifo->writeIndex = 0;
}
static int writeFIFO(FIFO *fifo, uint32_t *data, int len)
{
int leftLen;//fifo中的剩余容量
int i;
if (fifo->writeIndex >= fifo->readIndex)
leftLen = ______________________________________________
else
leftLen = ______________________________________________
if (len > leftLen) {
//no space write to fifo
// reset fifo
initFIFO(fifo);
return -1;
}
for (i = 0; i < len; i++) {
fifo->buffer[fifo->writeIndex] = data[i];
fifo->writeIndex = ¬¬¬¬¬¬¬¬¬¬¬¬_______________________________________ ;
}
return 0;
}
static int readFIFO(FIFO *fifo, uint32_t *data, int len)
{
int availRead;//fifo中数据长度
int i = 0;
if (fifo->writeIndex >= fifo->readIndex)
availRead = _______________________________________________;
else
availRead = ________________________________________________;
if (len > availRead) {
//no available length to read
return -1;
}
for (i = 0; i < len; i++) {
data[i] = fifo->buffer[fifo->readIndex];
fifo->readIndex = _________________________________________;
}
return 0;
}
03-15
3万+
10-19
9261
01-28
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交