7. OSEK OS-Event, Alarm

윰지·2020년 10월 18일
0

ECU SW Programming

목록 보기
7/10

Event

  • synchronization의 수단
  • event를 쓰면 exteded task가 된다.
  • task가 waiting state를 가지게 된다.
  • Task2와 Task1이 ready상태에서 Task2의 priority가 높아 먼저 돌게 된다. 그러다가 이벤트를 기다리면 waiting상태로 바뀌고 Task1이 돌다가 Task3이 들어오면 priority가 더 높은 Task3가 running된다. Task3에서 Task2가 기다리는 event를 발생시켜주면 Task2는 다시 ready상태로 바뀌고 Task3이 완료되면 Task2가 실행된다.
  • timing behavior가 중요한 경우 basic task와 extended task를 섞어쓰는 경우에 extended task의 priority를 더 낮게 해주는 것이 좋다.
    -> extended task는 event를 wait mechanism이 있기 때문이다.
  • Configuring Event
    • 이벤트의 개수는 target hardware에 따라 결정된다.
    • 이벤트 반드시 선언해야 한다.(oil 파일에)
      • name : run-time에서는 그 이름이 mask로 사용된다.
      • 최소한 하나의 task에서 사용되야한다.
      • event mask : N-bit vector
    • 같은 event가 다른 Task에 정의되도 서로 다른 event로 간주된다.
  • Waiting Tasks
    • extended task는 보통 AUTOSTART된다. 원래 모든 테스크는 다른 테스크가 해당 테스크를 activate 시켜줘야 ready 상태로 들어간다. 하지만 AUTOSTART라고 규정하면 OS가 start될 때 해당 task를 자동으로 activate된다.
  • Waiting on Event
    • WaitEvent(EventMask) 사용
    • suspended state에 있는 task에 event를 발생시킬 수 없다.
  • Setting Events
    • SetEvent() : event를 발생시키겠다.
      ex. SetEvent(Task2, Event1) : 어떤 task에 어떤 event를 발생시키겠다. Task2에 event1을 발생시키겠다.
    • Task가 suspend state면 event를 발생시켰을 때 error가 발생하는데 사전에 GetTaskState()를 사용해서 state를 확인한다.
  • Clearing Events
    • ClearEvent() : event 처리

Counters

  • Alarm을 쓰려면 counter를 정의해야 한다.
  • OS입장에서 counter는 기억장소이다.
  • 종류(AUTOSAR에서 규정)
    • Hardware Counter
    • Software Counter
  • Maximum value : 이 counter를 가졌을 때 최대값(보통 32bit이므로 2^32-1)
  • Minimum cycle : counter를 사용하여 alarm을 설정할 때 cycle을 설정한다. 그것의 최소 cycle.
  • Counter는 OS kernel이 가지고 있는 tick이 발생할 때마다 값이 1, 2, 3 증가하는 변수다. Counter가 제대로 동작하기 위해서는 일정한 주기로 증가시켜줘야하는 것이 필요하다. 그것을 counter driver라고 한다. 하지만 OSEK OS에서는 제공하지 않는다.

Alarms

  • OS에서 특정 counter에 구간을 설정하고 그 구간에 도달하게 되면 alarm이 expired(alarm이 발생하는 시점) 되게 하는 mechanism을 제공한다.
  • 어떤 알람을 쓸 것인지 oil에 정의한다.
  • counter를 지정, counter에 alarm attach
  • alarm은 counter 값이 어느 특정 값에 도달하면 어떤 액션을 취할 것인지 세팅하면 OS가 알아서 처리한다.
  • alarm이 expire 됬을 때
    • Activate Task
    • Alarm callback routine 호출할 수 있다.
    • event를 발생 시킬 수도 있다.

Startup and Shutdown

  • OSEK OS를 사용하여 exe 파일을 만들면 target 보드에 부팅되어 시작시키면 프로그램을 시작시킨다. -> startup
  • exe파일이 target에 부팅됬을 때 OS는 실행파일 속에 존재한다. OS kernel이 하나의 프로그램으로 묶여있는 상태에서 같이 로딩된다. -> Initially the operating system is not running.

Power-on or Reset

  • reset을 하면
    • LPC1768에서는 메모리 0번지(스택 주소가 담겨있음)로 가서 스택주소를 스택 레지스터에 올려놓고 다음 instruction부터 실행시킨다.
    • reset vector : 메모리 내의 특정 위치에 address값이 저장되어 있다. Reset을 시키면 하드웨어가 무조건 그 값을 읽어 프로그램 카운터에 집어넣는다.

Application start-up

  • InitializeTarget() : OS가 올라가지 않은 bare metal 상태이다. 이때 자기 어플리케이션이 동작하기 위해 필요한 하드웨어에 대한 초기화 작업이 벌어진다. InitializeTarget에서 어떤 일이 벌어지냐
  • Application modes : StartOS를 호출할 때 파라미터로 넘겨주는 것 -> StartOS(OSDEFAULTAPPMODE)

Initialize Target Function

  • Setting up Memory
    memory configuration : 내가 프로그램을 돌릴 때 사용하는 영역이라든지 memory map을 만드는 것이다.
  • Setting up Peripherals
  • Setting up Interrupts
  • Enabling Interrupts
  • Setting up Timers
  • Starting OS
  • Startup Hook

Application Modes

  • OS kernal을 start하면서 넘겨주는 파라미터 값

Shutting Down OS

oil 작성 체계

  • oil 파일을 작성한다. = 내 OS 커널에서 사용하게 될 object와 해당 object가 갖게 될 attribute 값을 설정하는 것이다.
  • OIL obeject 규정 -> 해당 object들은 attribute를 가진다.
    • CPU
    • OS
    • APPMODE
    • ISR
    • RESOURCE
    • TASK
    • COUNTER
    • EVENT
    • ALARM
    • COM
    • MESSAGE
    • NETWORKMESSAGE
    • IPDU
    • NM
  • implementation definition vs application definition
    • implementation definition
      • OS vendor, OSEK OS 자체를 만드는 사람이 만들어놓는다.
      • application definition에서 사용할 수 있는 object와 attribute의 범위를 결정
      • 어떤 객체를 쓸 수 있다. 그 object에 대해서 어떤 attribute를 정의할 수 있는데 그 attribute의 타입은 어떻게 된다. 그리고 해당 타입의 default값은 어떻게 된다.
        OS {
              ENUM [STANDARD, EXTENDED] STATUS = EXTENDED;
              BOOLEAN STARTUPHOOK = FALSE;
              .
              .
              .
           }
    • application definition : 실습 때 만든 oil 파일들

0개의 댓글