본문 바로가기
C언어

[C언어] UART 기능을 개발중입니다. (전역변수)

by 노후공략집 2023. 1. 20.
반응형

갑자기 들어온 업무, 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

댓글