목차 userInit() 함수의 동작 분석 롬에서 실행되는 롬 레지던트 이미지가 아닌경우, usrInit() 함수가 최초로 램에서 실행되는 함수이다. 따라서, 혹시 romStart()에서 램으로 복사한 이미지에 문제가 있을경우 이곳으로 제어권을 넘기는 순간 시스템이 비 정상적으로 동작을 하게 된다. 물론, 그런 경우엔, JATG 디버거 등을 이용해서 램을 테스트해 보거나 하는 방법이 필요할 것이다. 여기서는 램에 복사된 이미지가 이상이 없다고 가정을 하고, 실행 과정을 설명하도록 하겠다. 한가지 주의할 것은, romStart()에서 설명한 바와 같이, usrConfig.c 파일에 들어있는 usrInit() 함수의 경우에도, 특별한 문제가 없을 경우 수정을 할 필요가 없다는 것이다. 물론 디버깅 메시지 출..
romStart( ) 함수의 동작 분석 romStart( ) 함수의 동작 분석 romInit.s 로부터 제어권을 넘겨받아서 실행되는 romStart( ) 함수의 동작을 분석해 보도록 한다.어셈블러 ROM 초기화 코드에서 하는 가장 중요한 일은, 시스템의 RAM 영역을 사용 가능한 형태로 만들어놓는 것이다. 그렇게 해야 CPU 의 스택 포인터 값을 그 RAM 영역으로 설정 할 수가 있고, 스택 포인터가설정이 되어야 비로서 C함수를 수행할 준비가 되는 것이다. romStart( ) – 최초로 수행되는 C함수romInit.s에 있는 어셈블러 함수에 의해서 최소한의 보드 초기화가 완료되고, RAM 영역이 사용 가능한상태가 되서 romStart( ) 함수로 제어권이 넘어오게 된다. 209 void romStart..
Chapter 1. VxWorks BSP 파일 구성 .h : 이 파일은, 반드시 그럴 필요는 없지만, 일반적으로 BSP 디렉터리와 같은 이름을 갖는 헤더 파일로,하드웨어에 관련된 각종 상수와 파라메터 값을 선언한다. config.h : 이 파일은 BSP의 소프트웨어적인 각종 상수 값들을 갖과 있으며, 만들어 지는 VxWorks 이미지에포함될 각종 운영체제 라이브러리 등도 여기에서 결정된다. 이 파일에서 ../all/configAll.h 파일을 포함하는데,그 파일에 선언된 정의들을 고치지 않는 것이 좋고, 꼭 그파일에 선언된 정의들을 고치지 않는 것이 좋고, 꼭그파일에 선언된 내용을 바꿔야 한다면 config.h 파일에서 정의된 내용을 #undef 하고 나서 다시 정의하는것이 좋다. romInit.s : ..
앞 예제의 소스를 메시지 큐를 포함하여 수정하였다. 메시지 큐 외의 설명은 앞예제를 참고한다. main() 함수에서 메시지 큐를 생성하고, Task1 이 5초에 한번씩 Task2에게 메시지 큐를 보낸다. msgQCreate()함수의 인자로 사용되는 메시지 큐 정보인 메시지큐 개수와 메시지의 길이를 MAX_MSG 10, MAX_MSG_LEN 128 각각 정의 하였다. msgQCreate()함수를 통해 생성할 메시지 큐 핸들러의 옵션을 저장할 변수이다. 구조체 포인터 타입으로 선언되어 있으며 구조체는 아래와같이 정의되어 있다. [main 함수] msgQCreate()함수를 사용하여 메시지 큐를 생성한다. 함수의 원형은 아래와 같다. 첫번째 인자는 메시지의 개수이고, 두번째 인자는 메시지의 길이다. 세번 째 ..
• 앞 예제에서 설명한 Task 생성 및 232 디바이스에 대해서는 설명을 생략 하도록한다. • 타이머를 생성하여 원하는 주기로 Task를 호출하는 예제이다. • 세마포어를 생성하고 Task 가 블록킹 되어있다가 타이머에 의해 원하는 주기마다 세마포어 ID를 건네받은 Task 가 수행된다. • taskLib.h 는 semBCreate()함수 옵션을 사용하기 위해 등록 하였다. • 바이너리세마포어를 생성하는 semBCreate()함수는 생성된 세마포어 핸들을 반환한다. • 반환되는 핸들을 저장하기위해 semID1, semID2 변수를 선언하였다. • SEM_ID 타입은 아래와 같이 구조체 포인터로 typedef 되어있다. • semaphore 구조체는 세마포어 핸들 및 옵션, 상태를 저장하고있다. [ ma..
VxWorks OS에서 RS232 통신 사용하기 Task1, Task2 두개를 생성하여 Task1 은 232디바이스를 열어 메시지를 보내고 Task2는 단순히 카운터를 세는 test 코드를 작성하고 결과를 확인 하였다. main.c fcntl.h 는 open() 함수의 2번째 인수인 flag를 사용하기 위해 등록 하였다. ioLib.h 는 BAUDRATE 를 설정하기 위하여 ioctl()함수를 사용하기 위해 등록 하였다. main()함수의 반환형STATUS 는 VxWorks 에서 사용되는 type이며 따라가보면 int형 인 것을 아래와 같이 알 수 있다. OK 와ERROR 는 아래와 같이 define 되어 있다. 메인에서는 taskSpawn()함수로 Task 2개를 생성하고 에러처리를 한다. myTask..
2013.05.15 VxWorks 강의 정리 목차 VxWorks OS 구성 이론 • 소프트웨어 개발자의 목적은 위 와 같은 SBC 하드웨어의 회로를 살려서 각 기능들을 수행하는 소프트웨어를 탑제하는 것 이다. • 예를들어 위와 같이 PCB기판을 소프트웨어 엔지니어가 받으면 난감할 수 밖에 없다. 이러한 하드웨어를 살리기 위해서는 기능이 문제가 아니라 메모리와 모듈들이 제대로 동작하는지가 우선이 된다. • SBC는 다행히도 제조사에서 Boot ROM에 BSP 포팅을 해준다. • Boot ROM이 실행되고 나면 플래시메모리에 있는 VxWorks Image커널이 동작한다. • window NT를 예를 들면 아래와 같은 형태로 구성되어 있다. • VxWorks 에서도 위와 같은 형태로 OS를 만드는 과정을 거쳐..