# 多工
#### 一個作業系統的誕生
---
## 具備能力
* C\C++
* 組合語言(能讀但只需一點點寫)
* 認識硬體架構
* 了解晶片系統運作
---
## 但這好像是寫韌體該具備的能力耶
---
### 是的...
# 這是韌體開發觀念
# 第一課
---
## 何謂作業系統?
> 作業系統(英語:Operating System,縮寫:OS)是管理電腦硬體與軟體資源的系統軟體,同時也是電腦系統的核心與基石。作業系統需要處理如管理與組態記憶體、決定系統資源供需的優先次序、控制輸入與輸出裝置、操作網路與管理檔案系統等基本事務。作業系統也提供一個讓使用者與系統互動的操作介面。(出處:圍雞擺顆)
---
### 能不能用程式人的一句話說完?
---
# 作業系統就是提供應用程式的函式庫的啦!!
---
## 基本架構圖

---
# 多工實作
---
# [多工的想像](https://youtu.be/gUZ_SILsSuY?t=2)
---
# 講解結束了!
---
## 多任務圖解

---
## 多任務解釋
> 多任務處理(英語:Computer multitasking)是指計算機同時運行多個程序的能力。 多任務的一般方法是運行第一個程序的一段代碼,保存工作環境;再運行第二個程序的一段代碼,保存環境;…… 恢復第一個程序的工作環境,執行第一個程序的下一段代碼…… 現代的多任務,每個程序的時間分配相對平均。(出處:圍雞擺顆)
---
## 多工即是多任務
* **行程**即任務,**多行程**等同於多任務。
* **執行緒**即行程的任務,**多執行緒**等同於在行程內的多任務。
---
## 本次環境採用
* CPU: Cortex-M3\M4
* Compiler: Keil MDK
* Board: Keil內附模擬器
---
## 本次實作項目
* 任務切換
* 互斥
* 共享記憶體
---
## Cortex-M3架構
* 通用暫存器

---
## Cortex-M3架構
* 特殊功能暫存器

---
## Cortex-M3架構
* 控制暫存器

---
## Cortex-M3架構
* 運作模式使用的堆疊暫存器
| | 特權級 | 用戶級 |
| -------- | -------- | -------- |
| **中斷或異常模式** | MSP | |
| **執行緒模式** | MSP | PSP |
* 可透過操作控制暫存器來切換運作模式
---
## Cortex-M3架構
* 運作模式切換

---
## Cortex-M3架構
* 堆疊生長方向(送進堆疊)

* 堆疊生長方向(推出堆疊)

---
## 堆疊使用時機
* CPU中斷

* 函式呼叫
---
## 在C語言中堆疊使用於除了函式呼叫外,還有用於區域變數。
``` 範例
#include <stdio.h>
#include <stdint.h>
int32_t g_var = 10; // 全域變數
int32_t main(void)
{
int32_t i = 0; // 區域變數
int32_t arr[10]; // 區域變數
for(i=0; i<10; i++)
{
arr[0] = g_var + i;
}
return 0;
}
```
---
#### 講這麼多就為了重頭戲....
# 任務
---
## 任務切換

* 任務(Task),在實作上,任務可以想像成 --- **函式**。
* 函式一定會用到堆疊,在實作上,堆疊可想像成 --- **陣列**。
* 發生任務切換的場域 --- **CPU 中斷**
---
# 範例起因
> 最近台鐵自售機為了搶標,規格內說明多家票証的SAM卡必須同時運算。而依照現行讀卡機架構設計只有單顆MCU,因此同時間只能允許一家票証SAM卡運算,競標廠商所生產的讀卡機則有8顆MCU去各自對映8家票証SAM卡。在成本與時間考量下,必須設計單顆MCU去對映多家票証SAM卡通訊的功能
---
# 範例展示
---
# 但這只是剛開始
---
# 成為技術人多年...
---
## 大家還記得庖丁解牛的故事嗎?
---
## 那講講D-Flawless的故事吧

> 戴比爾斯鑽石公司成立於1888年,在其成立100週年之際,即1988年3月11日,在南非普列米爾(Premier)金伯利礦區發現了一顆重599.00克拉的特優質鑽石,被命名為“世紀”。
>
> 1988年三月十一日,這顆原石首度以未琢磨品的型態,出現在南非慶伯利的一場晚宴上,其罕見及珍貴,立刻獲得眾人的讚嘆。這場晚宴是為了慶祝戴比爾斯成立(De Beers Consolidated Mines)一百周年紀念而舉辦的,因此,它被命名為The Centenary Diamond,即世紀之鑽。
>
> 之後,戴比爾斯委託世界聞名的鑽石切割大師加比.托高斯基(Sir Gabriel S. Tolkowsky)進行世紀之鑽的設計與切割,加比.托高斯基帶領一組專家,花了一年研究如何將這顆原石切割,繼而花了一百五十四天的時間,以手工方式切除約50克拉的原石,將表面的裂紋除去。然後,加比.托高斯基才設計出三十種不同的切割鑽型供戴比爾斯選擇。
>
> 1991年,切割後的世紀之鑽,重273.85克拉,頂部有75 個面,底部有89個面,腰部有83個面,總計有247個切割面,使這顆內外無瑕的巨鑽展露萬丈光芒。雖然全球的專家們皆認為其價值無法估計,但是,這顆世紀之鑽已投保美金一億元以上,目前“世紀”鑽石由戴比爾斯收藏。
> 同時它也是世上最大的 D-Flawless 鑽石。
>
>PS:加比老伯真的很酷,他捨棄了電腦科技的計算方式和先進的機械切割方式,幾個專家花了長時間研究,用幾十年來琢磨鑽石的眼力、完全手感的切割,應該是一輩子功力的展現,太強了~!加比阿伯。
---
## 大的公司 v.s. 偉大的公司
---
## 做事的人 v.s. 做人的人

---
## 做人的主管 v.s. 做事的主管&老闆

---
###### 其實這才是我最喜歡的團隊方式

---

---
###### 常這樣用餐

---
###### 最後不小心真的拿到全國冠軍

---
# [就來分享一下過往吧](https://youtu.be/xPoEob2QpzY?t=1130)
---
#### 技術最需要什麼能力?
---
# 想像力
---
#### 技術最高境界乃在於...
---
# 一眼望穿
---
### 最後想說:
# 每人頭頂一片天,希望有幸見到各位發光發熱的一天。
---
# ...謝謝大家...
---
# 同一首舞...但...
### [T-ARA(K-POP)](https://www.youtube.com/watch?v=wBZ0JLJHTyA)
### [A1B4(K-POP)](https://www.youtube.com/watch?v=z5xNLXpSPuI)
### [伊能靜(????)](https://www.youtube.com/watch?v=eXvZjMgwPDI)
### [EXILE(J-POP)](https://www.youtube.com/watch?v=BDGUaK0SpqA)
### [ZOO(J-POP)](https://www.youtube.com/watch?v=AL0TE79SbP4)
### [中西圭三(原著)](https://www.youtube.com/watch?v=zytH7jFU2ZY)
---
{"metaMigratedAt":"2023-06-15T01:29:36.070Z","metaMigratedFrom":"YAML","title":"多工","breaks":false,"contributors":"[{\"id\":\"868eaf7c-b4ad-48c9-8117-f99c72eb354f\",\"add\":5272,\"del\":1265}]","description":"C\\C++"}