關於 Arduino Ameba 的 100 篇 - RTOS - hyperC - ARM memory system architecture (7/100)
接續第一篇 RTOS
我們用這套 自幹的 RTOS 為例:
這套 HyperC OS
github : https://github.com/ibanezchen/hyperCOS-evaluate
投影片介紹 : docs
研討會心得討論 : hackpad
一開始可以先參考這個 main.c
他會呼叫一個 core_init() , 這個程式在 src 的 core.c 中
void core_init() | |
{ | |
cache_init(); | |
cpu_init(); | |
soc_init(); | |
sch_init(); | |
task_init(&core_task_idle, | |
"idle", | |
core_idle, | |
CFG_TPRI_NUM - 1, | |
_alloc(CFG_IDLE_STACK), CFG_IDLE_STACK, 10, 0); | |
tmr_init_sys(); | |
ll_init(&core_gc_task); | |
} |
有兩個檔案
cache-pmsa.c
cache-vmsa.c
我們用哪一個呢?
pmsa : protected memory system architecture
vmsa : virtual memory system architecutre
首先, 可以先了解什麼是 MMU (memory management unit) / 虛擬位置 / 實體位置
這在一般作業系統 和 計算機組織 的書一定都會教. 這邊不多解釋.
但大家可能習慣用 google , 找了一篇對岸阿牛哥寫的, ARM MMU 工作原理剖析
作為參考.
如果有用過 ARM 的平台的話, 對 ARM 的發展可能不陌生
簡單說, ARM 架構 演進從早期 v4 - v5 - v6 -v7 今天有 v8
ARM 處理器系列也從 ARM7 - ARM9 - ARM11 - Cortex
cortex 時, 分成了三類 :
cortex-A (Application) : 功能強, 應用多的, 像 平板, 手機 幾乎都用 cortex-A
cortex-R (Real-time) : 強調能即時處理的, 多用在車用和工控上
cortex-M (Micro-controller) : 嵌入式系統, 強調省電的
像 Ameba 就屬於 Cortex-M 省電型.
照 ARM 官網 v7 architecture 的分類
Cortex-A : 走 VMSA : 一般 linux 可以直接跑, 像 Raspberry Pi 就是用 cortex-A
Cortex-R : 走 PMSA
Cortex-M : 走 類似 PMSA
但在 v8 時, Cortex-R 開始變化, 有一個 MMU 加進來了. 雖然不是 完全像 cortex-A 的 MMU 包含所有功能. 但這也意味著市場應用持續增加. 需要更有效的記憶體管理方式.
cortex-M 將來會不會也加入 MMU 呢?
也許但可能機率不高, 因為一直都會有最底層的小東西, 簡單應用, 不需要 MMU.
所以 cortex-M 的 v8 仍然維持 沒有 mmu 的狀況. - v8m architecture
了解的人可能會問, cortex-M 是可以搭 cache 的呀.
還好目前 Ameba 沒有. 所以可以放心地選擇 :
cache-pmsa.c
直接用空的 function 就可以了
不過將來可能會有 cache, 先把這份 memory barrier instruction 簡介 存一下
另外大家可能有聽過 uclinux , 這個是可以支援沒有 MMU 的 Linux
下回待續.
留言
張貼留言