February 01, 2009

解析 CuRT 與嵌入式系統設計

新春收到一份相當難忘的禮物,一篇由王佑中博士撰寫的文章,詳盡地分析小弟上個月釋出的 [CuRT - 精簡易懂的 RTOS],因為是相當仰慕的前輩執筆,當下還未能反應過來,喜悅之情,溢於言表。該文名為 [Introduction to CuRT_v1],是下學期 [國立台灣師範大學資訊工程系] 的「嵌入式系統」教材的一部分。

王佑中博士是台灣早年耕耘 GNU/Linux 重要人物,知名代表作品為 chdrv 中文終端機模擬程式,後來赴美深造,為 Realtime Linux 貢獻了極大的心力,主持了 [RED-Linux] 專案,大幅改善早期 Linux 的即時能力,並提出以下創新特徵:
  • a short kernel blocking time
  • a quick task response time
  • modulized and runtime replaceable CPU scheduler
  • a general scheduling framework
而即將開課的「嵌入式系統」課程,想必是高朋滿座,而使用 CuRT 作為教材的前言中,王博士提及:
    「對大多數的人而言,一個作業系統和天書可能差別不大。然而事實是如此嗎? 世界上有一大堆小的快不像樣的 OS,jserv 的 CuRT 就是一個例子。像這樣的 OS 理論上只要是資工系統的學生都應該要寫的出來,否則大家花了那麼多的時間學程式語言和作業系統是做什麼用的? 然而如果我們做個調查,我想大多數的人都認為自己寫一個 OS 是不可能的事。這份文件就是用來解答大家的疑惑,讓大家不要再覺得這是不可能的事情了。寫一個 OS 是多麼美好的事,在有限的生命中千萬不要遺漏了它。」
多麼激勵人心的一句話啊!算算從高中開始研讀作業統並著手實做以來,也十多年了,愚昧的我仍利用業餘空檔作著「在有限生命中」的「美好的事」。該文簡單扼要提及作業系統的組成、ARM (CuRT 採用 Xscale SoC) 的初始化與必要的設定、RTOS 的心臟 -- scheduler、ISR/Driver,並穿插若干個值得一試的練習題,非常精彩。
由 jserv 發表於 February 1, 2009 08:22 PM
迴響

國立『臺灣師範大學』。

好棒的文章,希望我也可以儘快完成我的夢XD


Rifur 發表於 February 1, 2009 09:56 PM

@Rifur,
感謝指正,已修正

jserv 發表於 February 1, 2009 10:23 PM

文章中提到的四點特徵並不是「創新」,而是「具備」。

Thinker 發表於 February 2, 2009 12:38 AM

-> 有沒有人覺得怪怪的,bl main 到底是跳到記憶體還是 BootRom 中了呢?

我在網路上找到一個答案,不知道對不對?
http://www.aub.org.cn/Embedded_driver/Article113014.html

-> BL是一个相对寻址,在使用BL之前你的PC要先跳到RAM里 例如你把代码(这些代码包括了BL main)都拷到 0xc0000000开始的地方,那么你需要 ldr pc,=0xc0000000 ,而因为在0xc0000000 后面也有个 BL main , 所以,PC执行到那里自动会BL到 RAM里面的 main ,而不会到flash里的main

John Linq 發表於 February 6, 2009 05:16 PM

恰好看到以下這個open source scheduler:

'LightingBolt' - an open source scheduler for a STR9 is released

http://www.keil.com/forum/docs/thread14276.asp

* A very fast context switch, measured in [microseconds] at 48[MHz] (STR9 can run at up to 96[MHz]).
* A rewritten synchronization module. Semaphores are now truly task-safe and contain the correct logic. A new synchronization primitive (event) introduced. All synchronization elements are linked statically, and there is no need to allocate/release them, or for this matter neither any other system resource, like timers. User does not need direct access to basic system data types to use the kernel. This enhances robustness.
* The system's priority queue has been completely rewritten. It is now logarithmically correct.
* The program has been generally retrofitted to run efficiently on an ARM core.
* Strict screening by PC-lint.
* Stack level checking.
* Open source installer (NSIS) used to create a self extractor for the delivery of the source code.
* Modularity.
* Documentation.

John Linq 發表於 February 23, 2009 10:15 AM

正在考量是否可能將這個CuRT移植到NXP的LPC2378 Microcontroller上,
但是,因為技術能力薄弱,所以,只能夠先一陣亂搞,看看情況如何。
一陣亂搞之後發現:

在\CuRT_v1\includes\kernel\kernel.h中

#define TASK_STACK_SIZE 8192
#define THREAD_STACK_SIZE 8192

這兩個數值太大了,導致最少也需要
RW-data=96 + ZI-data=231904 == 232,000 Bytes RAM
可是LPC2378只有32K不到的RAM........

John Linq 發表於 May 26, 2009 01:42 PM
發表迴響









記住我的資訊?