關於 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_init(),  再往下追, 在 cpu-arm 的子目錄下,
有兩個檔案

    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



下回待續.



留言

熱門文章