- Bare-metal programming is a term for programming that operates without various layers of abstraction
-> 하드웨어가 직접 소프트웨어를 건드리면서 돌아가는 시스템
- Without an operating system
- Without Libraries(ex. Device drivers)
- Program interacts with a system at the hardware level
- C or Assembly language programming with Cross compiler
- Focused on IO device(Sensors, Actuators) control
- IO interfacing method + controll engineering
- Memory mapped I/O(우리가 사용하는 보드)
- Any machine instruction that can access memory can be used to transfer data to or from an I/O device
-> CPU가 bus를 통해 입출력장치를 어떻게 access하는지
- Device와 memory가 address space를 공유한다.
- I/O는 단지 memory read/write하는 것처럼 보인다.
- No special commands for I/O Large selection of memory access commands available
- Isolated I/O
- address space 분리
- Need I/O or memory select lines
- Special commands for I/O
- Direct Memory Access(DMA)
- CPU가 해야하는 일을 대신 해주는 subsystem
- DMA Controller
- IO technique
모든 제어프로그램은 I/O device를 핸들링해야 한다. I/O device를 기본적으로 접근하는 방법은 memory mapped이다. 이 방식으로 I/O device에 data를 읽고 쓰고 하면서 device를 제어하는데 그런 방식에서 쓰는 tech가 2가지가 있다. Polling과 interrupt가 있다.
- Programmed
- polling : 프로세서가 입출력장치를 체크하는 것
- Interrupt driven
- interrupt : 입출력장치에서 data 입출력이 끝나면 CPU에게 interrupt를 날린다. CPU는 interrupt를 받자마자 하던 일 중지하고 데이터 확인
=> 원하는 기능을 하기 위해서는 어느 device에 어떤 register에 어떤 값을 세팅시켜줘야 하는지를 알아야하는데 그것만 알아야하는 것이 아니라 그 device에 그 register의 address까지 알고 있어야한다. 그를 constant로 정의해서 포인터 변수에 지정하고 활용해서 특정값을 세팅하는 것이다.