이번 글에서는 메모리 자원을 효율적으로 사용하기 위한 방법중 하나인 heap 메모리에 대해서 설명하도록 하겠다.이해를 돕기 위하여 다음과 같은 상황을 상상해 보도록 한다.서울역에서 출발하여 부산역까지 가는 기차가 있다. 이 기차에는 앉을수 있는 위치가 미리 정해져 있는 지정좌석제와 기차에 타는 순서대로 차례대로 앉게 되는 자유좌석제가 있다. 지정좌석제에는 기차가 출발하는 서울역에서부터 이용하는 승객도 있고, 중간 경유지에서 이용하는 승객이 있을 수 있다. 어쨋든 어디서부터 타든지 정확한 자기 좌석이 정해져 있으므로 비록 자리가 비어 있더라도 다른 승객이 이용할 수는 없게 된다. 자유좌석제를 이용하는 승객들은 아무자리에 가서 앉을 수 없고 맨 뒤칸 객차의 뒤쪽에서부터 차례대로 앉을 수 있다. 자유좌석제에 ..
C언어를 배울 때 가장 먼저 사용하는 함수는 printf()일것이다. 또한 C프로그램에서 가장 많이 불리워지는 함수도 printf()일것이다. 그러나 이렇게 많이 사용하고 있는 printf() 함수가 실제로 어떻게 생겼는지 그 소스를 찾아본적은 거의 없을 것이다.이번 글에서는 printf() 함수를 라이브러리에서 제공하는 것을 사용하지 않고 직접 만들어 보기로 하겠다.printf() 함수의 소스 코드는 인터넷에서 검색하면 어렵지 않게 찾을 수 있을 것이다. 이 글에서는 BSD-lite 안에 들어 있는 코드를 참조하였다.아직 C언어에 익숙하지 않은 프로그래머가 보기에는 소스코드가 다소 복잡하게 보일것이다. 따라서 이 코드를 바로 임베디드 시스템에 적용하기에 앞서 visual studio나 리눅스 환경에서 ..
앞의 글에서 설명하였던 System timer처럼 ARM core를 내장한 SoC는 인터럽트를 처리하기 위하여 별도의 interrupt controller를 주변장치의 하나로써 제공하였다. 하지만 Cortex core가 들어가 있는 SoC의 경우 ARM에서 만든 interrupt controller가 내장되어 있다.NVIC(Nested Vectored Interrupt Controller)라고하는 interrupt controller가 있는데, nested라는 말은 인터럽트가 발생하여 처리하고 있는 중에 더 높은 우선 순위의 인터럽트가 발생하면 현재 처리하고 있는 동작을 멈추고 높은 우선 순위의 인터럽트를 처리할 수 있게 하는 것이다.Vectored라는 말은 인터럽트가 발생하면 각각의 인터럽트를 처리하는..