72
RTOS - CM Neo Jou

RTOS on ARM cortex-M platform -draft

  • Upload
    jou-neo

  • View
    559

  • Download
    15

Embed Size (px)

Citation preview

Page 1: RTOS on ARM cortex-M platform -draft

RTOS - CM Neo Jou

Page 2: RTOS on ARM cortex-M platform -draft

IOT 技術同好會

Search : Ameba / IoT

Page 3: RTOS on ARM cortex-M platform -draft

AMEBA

Page 4: RTOS on ARM cortex-M platform -draft

CMSIS-DAP

USB mbed disk / USB-Serial / Debug

Page 5: RTOS on ARM cortex-M platform -draft

TOPICS

Cortex-M

RTOS

OS / Realtime

HW design for RTOS

Micro Kernel

memory

schedule

IPC

Future

Page 6: RTOS on ARM cortex-M platform -draft

ARM ARCH

Page 7: RTOS on ARM cortex-M platform -draft

ARM

Page 8: RTOS on ARM cortex-M platform -draft

ARM CORTEX

Page 9: RTOS on ARM cortex-M platform -draft

TOPICS

Cortex-M

RTOS

OS / Realtime

HW design for RTOS

Micro Kernel

memory

schedule

IPC

Future

Page 10: RTOS on ARM cortex-M platform -draft

OS -> OR

運籌學

資源 => 有效運⽤

兵⼒/糧草/時間...

Page 11: RTOS on ARM cortex-M platform -draft

空間

Memory

DOS - 640K

arduino : Atmega328 :

2K SRAM / 32K flash

Ameba : 512K internal

Page 12: RTOS on ARM cortex-M platform -draft

時間

CPU 處理速度

cortem-M3/M4

1.25 DMIPS/MHz

Ameba - 166MHz

Page 13: RTOS on ARM cortex-M platform -draft

時空轉換

compiler toolchain 參數選擇 -Osize / -Otime

空間換取時間

e.g. loop unroll, 查表 : switch , …

時間換取空間

e.g. loop without unroll, compression

Page 14: RTOS on ARM cortex-M platform -draft

資源

除了空間時間外, 還有什麼資源需要管理?

Power consumption -> Zephyr

容易 porting

CMSIS

middleware (USB / TCPIP / .. )

….

Page 15: RTOS on ARM cortex-M platform -draft

TRADE OFF

複雜的動態系統

external flash -> external RAM -> internal RAM -> cache ...

task priority / critical path

power consumption

Page 16: RTOS on ARM cortex-M platform -draft

TOPICS

Cortex-M

RTOS

OS / Realtime

HW design for RTOS

Micro Kernel

memory

schedule

IPC

Page 17: RTOS on ARM cortex-M platform -draft

即時 - REAL TIME

deadline => priority -> renice -> preemptive

Linux : RTOS ?

kernel 非搶佔, user 權限⾼也無法搶佔

時間計算/限制機制

改良

重改 linux - PREEMPT_RT

dual kernel - 替換底層 - Xenomai ( 底層⽤ Nucleus )

Page 18: RTOS on ARM cortex-M platform -draft

TOPICS

Cortex-M

RTOS

OS / Realtime

HW design for RTOS performance

Micro Kernel

memory

schedule

IPC

Future

Page 19: RTOS on ARM cortex-M platform -draft

HW FOR RTOS

MSP / PSP

LR - branch (bx lr), EXC_RETURN

auto push/pop stack

privileged / handler - thread

Page 20: RTOS on ARM cortex-M platform -draft

REGISTERS

Page 21: RTOS on ARM cortex-M platform -draft

AAPCS

Procedure Call Standard for ARM Architecture

Page 22: RTOS on ARM cortex-M platform -draft

HANDLER

privileged

thread / handler

handler only have privileged mode

Page 23: RTOS on ARM cortex-M platform -draft

EXC_RETURN

Exception : thread -> handler

LR : EXC_RETURN

Page 24: RTOS on ARM cortex-M platform -draft

TOPICS

Cortex-M

RTOS

OS / Realtime

HW design for RTOS performance

Micro Kernel

memory

schedule

IPC

Future

Page 25: RTOS on ARM cortex-M platform -draft

微核⼼

Memory

Thread

IPC

Page 26: RTOS on ARM cortex-M platform -draft

TEXT / DATA

* Howard - HyperC OS * Linker script - http://njiot.blogspot.tw/2016/03/arduino-ameba-100-textdatabssheapstack.html

Page 27: RTOS on ARM cortex-M platform -draft

動態管理

C: malloc / free

sbrk()

linker script

Page 28: RTOS on ARM cortex-M platform -draft

動態管理

Windows:

VirtualAlloc / HeapAlloc

非分⾴ / 分⾴

Linux:

vmalloc / kmalloc :

GFP_ATOMIC / GFP_KERNEL

Page 29: RTOS on ARM cortex-M platform -draft

動態管理

cortex-M : no MMU , no virtual address

經濟 <-> 技術, RAM 價格曲線

MMU overhead / die size cost

fragment / chunk / page / utilization

Page 30: RTOS on ARM cortex-M platform -draft

CACHE

Ameba : cortex-m3 , no cache

instruction / data

barrier : ISB , DSB, DMB

Page 31: RTOS on ARM cortex-M platform -draft

TOPICS

Cortex-M

RTOS

OS / Realtime

Micro Kernel

memory

schedule

IPC

Page 32: RTOS on ARM cortex-M platform -draft

多⼯-1

真的需要多⼯?

* https://github.com/liuxuming/trochili

Page 33: RTOS on ARM cortex-M platform -draft

ARDUINO

setup()

loop()

Page 34: RTOS on ARM cortex-M platform -draft

多⼯-2

ISR

* https://github.com/liuxuming/trochili

Page 35: RTOS on ARM cortex-M platform -draft

無線程排程-ISR

8-bit / 16-bit programming

x86

BIOS/DOS INT

Page 36: RTOS on ARM cortex-M platform -draft

VECTOR TABLE

Page 37: RTOS on ARM cortex-M platform -draft

線程排程 - TIMER - 1

One shot / period

latency : 8 cycles

auto push pop by HW

Pros : easy, quick, less overhead

Page 38: RTOS on ARM cortex-M platform -draft

TICKER SCHEDULER

ESP 8266 - yield() do back ground functions ; https://github.com/Toshik/TickerScheduler

void setup(void) { … if (ts.add(0, 5000, task0, true)) { Serial.println("Tick task - task0 ok"); } if (ts.add(1, 2000, task1, true)) { Serial.println("Tick task - task1 ok"); } …. }

void task0(void) { Serial.println("Task0"); } …

void loop(void) { ts.update(); }

Page 39: RTOS on ARM cortex-M platform -draft

TICKER SCHEDULER

Page 40: RTOS on ARM cortex-M platform -draft

TICKER SCHEDULER

ESP 8266 - yield() do back ground functions ; https://github.com/Toshik/TickerScheduler

Page 41: RTOS on ARM cortex-M platform -draft

ARM MBED TICKER

https://developer.mbed.org/handbook/Ticker

Page 42: RTOS on ARM cortex-M platform -draft

TIMER CONS

HW timer 有限

SW timer : 延遲

preemptive

no reentrant

context switch ?

function execution -> starvation

Page 43: RTOS on ARM cortex-M platform -draft

多⼯ - 2

multi-tasks

Page 44: RTOS on ARM cortex-M platform -draft

多⼯ - 3

⼯作 Task 程式執⾏最⼩單位?

Process =>Thread

Unix -> Mach

第⼀代 micro kernel

Mac OSX

Page 45: RTOS on ARM cortex-M platform -draft

THREAD

Page 46: RTOS on ARM cortex-M platform -draft

ARDUINO SCHEDULER

zero, MKR1000 - cortex-m0+ , Due - cortex-m3

https://www.arduino.cc/en/Reference/Scheduler

Page 47: RTOS on ARM cortex-M platform -draft

ARDUINO SCHEDULER

為何需要多⼯

Page 48: RTOS on ARM cortex-M platform -draft

ARDUINO SCHEDULR

NUM_REGS=10, https://github.com/arduino-libraries/Scheduler/blob/master/src/Scheduler.cpp

Page 49: RTOS on ARM cortex-M platform -draft

ARDUINO SCHEDULR

NUM_REGS=10, https://github.com/arduino-libraries/Scheduler/blob/master/src/Scheduler.cpp

Page 50: RTOS on ARM cortex-M platform -draft

ARDUINO SCHEDULR

NUM_REGS=10, https://github.com/arduino-libraries/Scheduler/blob/master/src/Scheduler.cpp

Page 51: RTOS on ARM cortex-M platform -draft

ARDUINO SCHEDULER

和 mini-arm-os / RTX 很像

 比 timer 優點 :

TCB : Task control block

各⾃有 stack

Page 52: RTOS on ARM cortex-M platform -draft

RTX

何時切換:

systick interrupt

CMSIS API

IPC

Page 53: RTOS on ARM cortex-M platform -draft

SWITCH- SYSTICK

Page 54: RTOS on ARM cortex-M platform -draft

SWITCH - PENDSVC

Page 55: RTOS on ARM cortex-M platform -draft

CMSIS-RTOS

Cortex Microcontroller Software Interface Standard

Page 56: RTOS on ARM cortex-M platform -draft

IDLE TASK

busy waiting 耗電

WFI / WFE

中斷完成時直接休眠, 不回 Thread, 省下 stack push/pop

Page 57: RTOS on ARM cortex-M platform -draft

TOPICS

Cortex-M

RTOS

OS / Realtime

Micro Kernel

memory

schedule

IPC

Page 58: RTOS on ARM cortex-M platform -draft

IPC - 1

Inter Process Communication

L4 kernel - 第⼆代微核⼼重點

f9-kernel: http://wiki.csie.ncku.edu.tw/embedded/f9-kernel

Page 59: RTOS on ARM cortex-M platform -draft

SHARE MEMORY

No thread safe

flag

interrupt write status

thread polling

Page 60: RTOS on ARM cortex-M platform -draft

CRITICAL SECTION

atomic

spinlock / mutex / semaphore 差異?

Page 61: RTOS on ARM cortex-M platform -draft

IPC -⼩訊息傳遞

signal events

mutex

semaphore

Page 62: RTOS on ARM cortex-M platform -draft

IPC - ⼤訊息傳遞

message queue

mail queue

Page 63: RTOS on ARM cortex-M platform -draft

L4

http://www.slideshare.net/microkerneldude/from-l3-to-sel4-what-have-we-learnt-in-20-years-l4

https://www.youtube.com/watch?v=RdoaFc5-1Rk

Page 64: RTOS on ARM cortex-M platform -draft

優先權錯逆

priority inversion

realtime - deadline

Page 65: RTOS on ARM cortex-M platform -draft

優先權錯逆

⽕星探測計畫

http://wiki.csie.ncku.edu.tw/embedded/priority-inversion-on-Mars.pdf

Page 66: RTOS on ARM cortex-M platform -draft

複雜

drivers

wifi, usb, …

network protocol

TCP/IP

SSL / TLS

MQTT / HTTP

….

Page 67: RTOS on ARM cortex-M platform -draft

MBED OS

LoRa : https://docs.mbed.com/docs/lora-with-mbed/en/latest/intro-to-lora/

Page 68: RTOS on ARM cortex-M platform -draft

WIFI 驅動程式-1

http://www.slideshare.net/simenli/adv-embedded

Page 69: RTOS on ARM cortex-M platform -draft

WIN WDI DRIVER

Page 70: RTOS on ARM cortex-M platform -draft

安全

資料安全

資訊隱藏與封裝 (C++)

資訊最⼩化公開原則

各⾃ stack

系統安全 : security boot

網路安全 : SSL/TLS

Page 71: RTOS on ARM cortex-M platform -draft

安全- 硬體設計

Ameba Cortex-M3 :

MPU -> mbed uvisor

hardware crypto engine

加解密, 簽章 : AES / SHA-2

TrustZone : v8m : SAU

stack limit

Page 72: RTOS on ARM cortex-M platform -draft

FUTURE

Benchmark

ARM mbed / Arduino

CMSIS++ / mbed minar

NUTTX : ardupilot / cortex-m4

Zephyr : Linux ⼩弟

dynamic linking / module loading

hypervisor