포인터에 값을 추가로 넣을 수 있나요?
글쓴이: z_yon / 작성시간: 금, 2021/06/04 - 5:04오후
i2c 동작에 device id 와 reg 주소, 데이터를 포인터로 넘기는데
reg 주소를 데이터와 합치고 싶어요
i2c_write(uint8_t dev_id, uint8_t reg_addr, uint8_t * data, uint8_t len)
이렇게 받아온 값을
i2c_write(uint8_t dev_id, uint8_t * tx_buf, uint8_t tx_num)
이 api에 맞춰서 넘기고 싶은데
주소값을 바로 넘기고 싶은데 레지스터 주소값을 어떻게 넘겨야하는게 좋을까요
Forums:
후자의 API 수정이 불가능하다면 적당한 스택
후자의 API 수정이 불가능하다면 적당한 스택 크기만큼 끊어서 보내는 방법밖에 없을것으로 보입니다.
API 수정이 가능하다면 구조체로 2개 인자의 주소를 담아서 포인터를 넘기면 될것이고요.
우선 malloc()으로 잡히는 공간은 stack
우선 malloc()으로 잡히는 공간은 stack 영역이 아니라 heap 영역입니다.
심심찮게 내장형 소프트웨어 동작에서 가장 비싼 처리는 바로 특별한 이유없이 데이터를 copy or move 하는 것입니다.
아주 portable 하지는 않지만 많은 내장형/펌웨어 코드에서 사용하는 방식은 최대로 받을 수 있는 len 사이즈를 잡아 놓고 사용하는 것입니다. 간략히 나타내면 아래와 같이 할 수 있겠네요.
물론 이 방법은 쓰레드와 mutex를 쓸 필요가 없는 상황에서만 활용가능합니다.
API 에서 reg_addr 을 먼저 보내고 그 다음
API 에서 reg_addr 을 먼저 보내고 그 다음 data를 보내야 됩니다. 스택 크기가 부족하니까요.
API 내부에서는 스택 크기가 충분한가요? 동일한 실행영역이면 스택 부족으로 연결할수가 없습니다.
스트림으로 끊어서 보내야 합니다.
댓글 달기