임베디드용 io 라이브러리 설계 계획-io라이브러리로 추상화 했을때의 장단점
임베디드용 io 라이브러리 설계 계획
avr, pic, arm등의 작은 마이컴칩에 프로그램을 하다보면,
eeprom, uart,spi,i2c,can,...등의 많은 장치와 통신 또는 데이터를 읽고, 쓰는 기능이 필요하다.
그런데 문제는 각 장치들의 특성이 동일하지 않다는 것이 문제.
단순히, write, read함수로 통일할 수 있을것 같지만, 그렇지 않다.
윈도우의 Write함수도 내부적으로 장치별로 verify기능을 가지고 있을 수 있지만, 확실하게 하려면, verify기능도 넣어야 한다. 또한, 내부적으로 verify기능이 있다고 해도, 전체적으로는 각 장치마다 verify코드가 필요하다.
코드 사이즈 감소는 어려워 보인다.
io라이브러리로 추상화 했을때의 장단점을 비교해보자.
io_read/io_write로 추상화하면
--------------------------------------------------------
장점
- write-verify기능을 공용으로 사용할 수 있다.
- 모든 io에 대해 동일한 기능 적용
각각의 전용 write-verify함수를 작성하는것과의 차이는?
- 약간 코드 수정으로 다양하게 사용할 수 있다.
- 다양한 장치를 하나의 코드를 사용하여, 코드 사이즈 감소가 될 수 도 있다.(거의 불가능)
단점
- 복잡해짐
- 코드사이즈 증가
- 느려짐
verify
----------------------------
- UART와 같은 포트에서는 write-read-cmp가 아닌, crc, check-sum을 데이터에 포함해서 전송하고, 처리 결과 응답을 받아서 확인해야한다.
(write-read-cmp 적용불가. 능동장치. 속도가 느려, 대역폭에 제한이 큼)
- flash, eeprom등은 write-read-cmp적용가능(수동장치. 속도가 빨라, 대역폭에 제한이 별로 없음)
결론
---------
임베디드 환경에서는 추상화는 다소 무리가 있다.
불편하더라도, 전통적인 방식의, 장치별로 제작된 전용 함수를 사용하는것이 좋을듯 싶다.
'C언어,ARM' 카테고리의 다른 글
startup_stm32f2xx.s - arm? gcc_ride7? (0) | 2016.09.09 |
---|---|
프로그램 코드 라이브러리 작성시 고려사항 (0) | 2016.09.01 |
C언어-itoa 성능테스트 (0) | 2016.08.31 |
error: conflicting declaration of 'long unsigned int xxx()' with 'C' linkage (0) | 2016.08.30 |
arm-none-eabi-gcc: error: CreateProcess: No such file or directory (0) | 2016.08.30 |