ARM cortex 업체별 코드 호환성
C언어,ARM / 2020. 5. 9. 23:18
ARM cortex cpu 제조 업체별로 코드호환성 조사
제조사별로 주변장치(peripheral,module,interface)들이 달라서,
ARM 코어(core)는 거의 동일하나, 주변장치코드는 거의 다르다.
예) 업체1의 CPU는 USART가 있지만 업체2는 UART만 있다.
(드라이버에 사용가능한 기능을 표시하는것이 있다)
마이컴용 간단한 cmsis UART드라이버는 없는듯.
리눅스타입의 드라이버는 존재.
예) Driver_USART.h (소스코드는 작성해야한다)
fsl_uart_cmsis.h
fsl_uart_cmsis.c <<-- 이 코드는 제조업체에서 작성
사용자는 ARM_DRIVER_USART를 사용하여 프로그램.(UART0_InitPins()등을 직접 호출하여 사용할 수 도 있다)
ARM_DRIVER_USART는 UART0_InitPins()등의 함수를 호출
void UART0_InitPins(void)함수는 RTE\Board_Support\MKV31F512VLL12\pin_mux.c 등에 있다.
typedef struct _ARM_DRIVER_USART { ARM_DRIVER_VERSION (*GetVersion) (void); ///< Pointer to \ref ARM_USART_GetVersion : Get driver version. ARM_USART_CAPABILITIES (*GetCapabilities) (void); ///< Pointer to \ref ARM_USART_GetCapabilities : Get driver capabilities. int32_t (*Initialize) (ARM_USART_SignalEvent_t cb_event); ///< Pointer to \ref ARM_USART_Initialize : Initialize USART Interface. int32_t (*Uninitialize) (void); ///< Pointer to \ref ARM_USART_Uninitialize : De-initialize USART Interface. int32_t (*PowerControl) (ARM_POWER_STATE state); ///< Pointer to \ref ARM_USART_PowerControl : Control USART Interface Power. int32_t (*Send) (const void *data, uint32_t num); ///< Pointer to \ref ARM_USART_Send : Start sending data to USART transmitter. int32_t (*Receive) ( void *data, uint32_t num); ///< Pointer to \ref ARM_USART_Receive : Start receiving data from USART receiver. int32_t (*Transfer) (const void *data_out, void *data_in, uint32_t num); ///< Pointer to \ref ARM_USART_Transfer : Start sending/receiving data to/from USART. uint32_t (*GetTxCount) (void); ///< Pointer to \ref ARM_USART_GetTxCount : Get transmitted data count. uint32_t (*GetRxCount) (void); ///< Pointer to \ref ARM_USART_GetRxCount : Get received data count. int32_t (*Control) (uint32_t control, uint32_t arg); ///< Pointer to \ref ARM_USART_Control : Control USART Interface. ARM_USART_STATUS (*GetStatus) (void); ///< Pointer to \ref ARM_USART_GetStatus : Get USART status. int32_t (*SetModemControl) (ARM_USART_MODEM_CONTROL control); ///< Pointer to \ref ARM_USART_SetModemControl : Set USART Modem Control line state. ARM_USART_MODEM_STATUS (*GetModemStatus) (void); ///< Pointer to \ref ARM_USART_GetModemStatus : Get USART Modem Status lines state. } const ARM_DRIVER_USART; |
cmsis 드라이버코드를 잘 사용하면, 쉽게 프로그램 작성이 가능하나,
코드 효율성은 매우 나빠보인다.
덩치가 크고, 메모리도 사용할것 처럼 보인다.
'C언어,ARM' 카테고리의 다른 글
J2Cal 계산기, RS232TestProgram3, ScreenBMPcopy (0) | 2020.05.25 |
---|---|
남에 소스코드 분석하기 (0) | 2020.05.22 |
STM32 - ST-LINK download (0) | 2020.05.09 |
SMT32 - UART1 설정 (0) | 2020.05.09 |
error C2733: wmemchr (0) | 2020.05.01 |