갑자기 들어온 업무, UART 기능 개발
처음에는 뭔가 뭔지도 모르고 UART 기능 예제가 있는 파일 하나 덜렁 받아다가
양산 수준으로 기능을 개발하려니 내가 지금 이걸 왜 하고 있는거지란 생각만 수십번 했는데
이제와서야 조금씩 눈이 띄기 시작했다. 역시 사람은 고생을 해야 뭔가 배운다. (?)
일단 내가 어떤 부분을 담당하는지 정확하게 정의해야 한다.
우리 회사가 만드는 제품의 chip 이 있고 (1번), 내가 그 위에 UART 기능을 올린다.
그리고 UART 기능을 받아서 동작을 하는 고객사의 device 가 있고 (2번),
고객사의 device 는 받은 UART 명령에 대한 response (=ACK) 를 던져준다.
나는 그 ACK 를 받아서 우리 제품으로 필요한 정보를 전달한다.
그리고 나니 뭔가 허접하다.
일단 몇가지 시도를 했다가 포기한 부분이 있다.
바로 uart response 가 오는 부분인데, 6byte 의 명령을 uart 로 전달하면,
고객사제품에서는 즉각 6byte 의 response 를 보내준다.
이 과정에서 굉장히(?) 빠른 속도로 response 를 여러번 받았을때 그 6byte 의 데이터를 저장하기 위해서 malloc 을 통해서 배열을 동적으로 생성했었다. 동적으로 배열을 생성하면 몇개가 들어와도 순서대로 처리가 가능할 것이라는 생각이었다.
결과적으로 malloc 의 처리는 어느정도 돌아갔지만, 테스트할때 150ms 간격으로 빠른 command 를 날리다 보면 malloc 의 동적생성 보다 빠른 데이터의 속도 때문인지, 우리 제품이 다운되는 일이 종종 발생했다.
결국 malloc 을 지우고 전역변수로 배열을 딱 6byte 만 잡아서 오는대로 집어 넣고 처리하도록 만들었다. 그래도 안죽더라 -_- 내가 너무 chip 의 처리속도를 과소평가했나 보다.
static int responseArr[6];
전역변수로 선언해서 모든 자리수가 0으로 초기화 된다.
'C언어' 카테고리의 다른 글
[C언어] int array, char array만드는 법, 초기화 하는 법 (0) | 2023.01.20 |
---|
댓글