一張圖只能說一個故事嗎?

一位企業家經營了一間氣派的百貨公司,他在百貨公司的大廳裡配置了一座巨大的噴水池,水池裡座落的是四位女神像背靠背佇立在水池中央,流水就從女神們身上的瓶器淌瀉而下,美極了!彷彿是遊客必訪的打卡景點。

企業家正期盼優美的噴水池吸引許多的客人前來。

沒想到…

新聞媒體突然披露一張靈異照片,背景正是這個噴水池,而水流裡有個幽怨的女鬼身影若隱若現。消息傳得很快,一傳十,十傳百,大家都在討論。百貨的員工一邊擔心影響顧客到店的心情,一邊想老闆會怎麼因應。

謠言眼看愈演愈烈…

過了幾天,水池邊竟然聚集比了往常多的人潮,大家都排著隊。原來,人們覺得既然傳言有鬼,來許願或許可以完成心願。

The hand of a woman is holding a coin, about to throw it in the water of a wishing fountain.

老闆隨意問了一位小男孩:「你也有願望嗎?」
男孩說:「我想要一雙新鞋還有新玩具!」
老闆拿出了一枚硬幣遞給小男孩,說:「你去找媽媽說你要許願,許完願到樓上,你的願望就會實現。」

老闆身邊的員工不解怎麼一回事,老闆輕鬆的說了一句
多數的願望都伴隨著消費。


[2019/9/27, 中央通訊社] 唐鳳:以幽默反制假訊息 比單純事實查核更有用

當疫情正盛的同時,也有許多的假消息甚囂塵上。當時的行政院政務委員唐鳳對外媒分享台灣如何打擊假消息。

她說壞消息總是傳得很快,如果只是正面澄清,正確的訊息往往傳播得比壞消息慢得多,所以要幽默以對,而且若夠有趣,有時還能比假消息更快被接收到。

有時我們會看到政治、商業策略上所謂的反向操作。
所以,一張圖只能說一個故事嗎?

轉念!轉念!
或許轉念就是抽換背景,就能說出不同的故事。

(有人覺得這故事很熟悉嗎?XD)

[Windows] 如何確認本次開機的狀態呢?

Windows 有幾種關機的方式:

  • Fast Startup
  • Full Shutdown
  • Hibernate

要怎麼知道本次開機的狀態(原因)呢?

打開 PowerShell 就可以

$boot = Get-WinEvent -ProviderName Microsoft-Windows-Kernel-boot -MaxEvents 10 | Where-Object {$_.message -like “The boot type*”}; $boot| format-list

簡單來說,就是利用Event Viewer來查看是否有 Microsoft-Windows-Kernel-boot 這一類的事件,且包含 “The boot type*" 的訊息,通常被查出來的會是 ID 27。

所以這樣的指令也可以:
Get-WinEvent -ProviderName Microsoft-Windows-Kernel-boot -MaxEvents 10 | Where-Object {$_.id -like “27”}

而 Boot type 表示的意義如下

  • 0x0- cold boot from full shutdown
  • 0x1- hybrid boot (fast startup)
  • 0x2- resume from hibernation

這裡有個陷阱,如果沒有注意Event發生的時間,可能會有誤判。

殘念的是,以 Hibernate 來說,似乎只有Windows 8/Windows 10適用這個方法來查證,Windows 11已經不為它產生 Event ID 27了。

《良醫墨非》怎樣才是好醫生?

沒有想到原來線上影音也有下架的一天,這裡為《良醫墨非》來個文字留念。

《良醫墨非》原名是 《Good Doctor》,而台譯名稱像是將焦點更集中在有自閉症的主角—墨非如何融入醫生這個職業。

自閉症者是因為腦部發展異常,通常會有語言障礙、社交障礙、重複性動作,因此不容易與人建立情感。高功能自閉者意指能夠自理生活,但未必能很快適應生活模式上突然而來的變化。
主角設定為「高功能自閉」加上「學者症候群」,所以呢,後面會看到他猶如過目不忘的技能。
個人覺得以"患病"來稱呼似乎不是很道地百分百,我會想以個人特質來描述他。

自閉日常

墨非一出場就能處理意外被玻璃砸中的小男孩,還利用現場物品(酒瓶、小刀、塑膠管)製作了單向閥解決了氣胸,爭取了更多的醫療時間。男主角墨非腦中猶如載入了能隨時調閱的各種醫學百科,病患診斷也許沒有太大的困難,然而在人生際遇上的轉折,在溝通和與人互動方面經過許多嘗試與突破。

最近非常流行的《非常律師禹英禑》也是同樣的主角特質,事實上,自閉+學者未必是現在社會上容易出現的案例。這些戲劇讓我們多加認識了自閉症,但這邊也要先澄清一點,劇情可能為了增加可看性多了一些美化部份。

醫療日常

這是一部實實在在的醫療劇無誤,每一集幾乎都有兩個病例與開刀的場景,病例也幾乎不重覆。像是診療前的問診、血液檢析、超音波、電腦斷層掃描…等等檢驗,病房與手術室中的心電圖、血壓、二氧化碳濃度等等各項機器數據,後續的住院觀察。醫師在治療過程中的種種細節被一一呈現出來,實在看得很過癮,也很有收穫:

  • 醫師非萬能
    診斷並非百分百命中,必須根據病人從身體、言語、背景…透露的訊息一一推敲,有時必須在病程發展未明前先預防性投藥,有時也可能因為刻版印象而誤判。
  • 觀察力很重要
    話說中醫診斷靠的是「望、聞、問、切」,不過從劇情裡來看特別感到意外,西醫的望診與觸診也是一流的,能在與病人對話以外更能直接獲得的線索。

    |有個鏡頭算是誇張好笑:墨非與醫院清潔工建立起友誼數月後,跟他的主管醫師尼爾說須要請清潔工去體檢,因為有可能有胰臟癌。主管尼爾跟墨非說請他帶路走過去,不要說話。接著鏡頭帶著兩人路過的帥氣面孔,確定送檢,確定診斷!

    |下肢腫大或冰冷或許對有些人來說很平常,但它可能也代表在心臟功能與血液循環方面的異常表徵,所以醫師必須能去推論可能的原因。其實中醫能演繹複雜的人體機制,兩者似乎有異曲同工之妙。

    |不僅盲腸炎可以透過觸診確定,腹部的腫瘤也可能摸得出來。所以,多摸摸自己的肚子認識自己身體是不錯的。

職場人際

墨非帥氣出場的同時,醫院的溫和老院長正在董事會上極力爭取錄用有自閉症的住院醫生,努力地想要用什麼樣的論調來說服眾位具有投票權的人。即使在墨非錄取後,也未必直接獲得外科主任和醫師群的肯定,墨非因為自閉這個特質聽不懂諷剌,好像也不錯,不過他也不會說謊,所以無法好好處理醫病關係。

而其它常設角色也有他們的人生發展,每位人物都有血有肉得讓人看了有津有味,即使角色結束了也有非常洽當的理由,看了總捨不得。醫療面對的不僅是人體的狀況,還參雜了家庭、性別、種族議題,處理生理之外,心理也要照顧啊!

好玩的是,為了呈現出種種轉折,醫生們在做手術的同時也進行許多與醫療無關的私人對話,而且聊到心崁裡,這樣子手上的刀能穩嗎?實在是有點懷疑。
不過,換個角度想,如果是沉默單純的手術畫面,或是太多非醫院的畫面,可能都不理想。因此,手術室聊天應該也是一種妥協的呈現。

整體來說,每個角色都有他的磕絆,每個發展都是掙掙扎扎後往正面發展。
因為墨非異於常人的學者技能,所以他的診斷能力非常高超,有時其他醫師也要倚賴他的建議,然而,每個人都有能啟發別人的地方。
我可以看到每一位都是 Good Doctor。

圖片來源 https://www.tvinsider.com/show/the-good-doctor/

追到第四季完,期待第五、六季。

[延伸閱讀]
什麼是自閉症?了解自閉症7徵兆、原因、治療及教養方式

Windows Device – Power Management

[2023/01/13 再更新]

從 Device Manager 確認 Device 的設定

我們知道從 Device Manager (DevMgmt.msc) 可以確認各個 Device 的狀態與設定等資訊,有些設定可以給使用者決定開或關,那它們都儲存在哪裡呢?

例如:使用者可勾選

“Allow the computer to turn off this device to save power"

有些是存在 Windows Registry 中,那要如何去確認 Registry 的位置呢?

1. 開啟 Device Manager 裡點選你要確認的裝置,按右鍵看內容 Properties。

這裡以在 Windows 10 下檢視

Intel USB 3.1 eXtensible Host Controller 為例。

2. 切換到 Details 那頁,找出 Driver key,按右鍵做 Copy 。

3. 叫出 regedit,從 HKEY_LOCAL_MACHINE\SYSTEM\ 進行搜尋剛剛複製的 Driver key。

可以看到 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI\VEN_8086&DEV_06ED&SUBSYS_098D1028&REV_00\3&11583659&0&A0] 裡的 Driver 是符合的,那麼這組就是我們的目標。

4. 接下來可以檢視裡面的項目,可以推測

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\PCI\VEN_8086&DEV_06ED&SUBSYS_098D1028&REV_00\3&11583659&0&A0\Device Parameters\WDF]

IdleInWorkingState“=dword:00000001

對應到

“Allow the computer to turn off this device to save power"

IdleInWorkingState 這個鍵值可儲存該設定。

1 為勾選,0 為取消。

使用者看到的 Power Management 三個開關

從 Device Management 找到 Device 後點出 Property,找出 Power Management 的頁面,可以看到三個開關:

□ Allow the computer to turn off this device to save power
□ Allow this device to wake the computer
□ Only allow a magic packet to wake the computer

Network Adapter 的秘密在 “PnPCapabilities"

此篇 [January 15] Allow the computer to turn off this device to save power is grayed out

提到"Allow the computer to turn off this device to save power" 是由 DWORD registry “PnPCapabilities" 來控制:

當值為24時,該選項會灰底。
當值為0,表示允許在Idle時關閉裝置。

但僅在 Network Device 找到,推測:
“PnPCapabilities" 似乎僅為 Network Device 所用?

微軟怎麼說…

參考這篇 https://learn.microsoft.com/en-US/troubleshoot/windows-client/networking/power-management-on-network-adapter

裡面詳述關於 networking 有三種選項:

□ Allow the computer to turn off this device to save power
□ Allow this device to wake the computer
□ Only allow a magic packet to wake the computer

對照 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\0010]

(注意:0010為Device Number,各機台不同)

當三個選項勾選狀況為以下:

  • VVX – PnPCapabilities = 0 (預設)
  • VVV – PnPCapabilities = 0x100 (256)
  • VXX – PnPCapabilities = 0x110 (272)
  • X– – PnPCapabilities = 0x118 (280)

微軟文件也指出,有些操作會導致矛盾的值產生,例:

  1. 先開三個勾勾 VVV – PnPCapabilities = 0x100 (256)
  2. 取消第一個勾勾 Xvv – PnPCapabilities = 0x118 (280)
  3. 再勾第一及第二,第三不勾 VVx – PnPCapabilities = 0
  4. 再重覆第二步(取消第一個勾勾) Xvx – PnPCapabilities = 0x18 (24)

這樣的操作後竟然和前面說明的不同結果??其中邏輯真的是讓人一頭霧水…

實際還是得依歸微軟黑盒子的內部邏輯…。

[程式C] 記憶體對齊單位

#pragma pack(1) 用來表示記憶體對齊單位

1 表示以 BYTE 作 align

4 表示以 DWORD 作 align

() 裡可選擇的是 1,2,4,16

#pragma pack 會要求compiler 使用特別的對齊方式來包裝 Structure Member . 大多數的compilers, 當你宣告一個結構時, 將會在彼此成元之間插入 padding 來確保他們在記憶體中的對齊。

範例程式:

#pragma pack(1)
typedef struct _TEST_PACK_1 {
  char AAA;
  short BBB;
  __int32 CCC;
} TEST_PACK_1;
#pragma pack()

#pragma pack(2)
typedef struct _TEST_PACK_2 {
  char AAA;
  char BBB;
  __int32 CCC;
} TEST_PACK_2;
#pragma pack()

#pragma pack(4)
typedef struct _TEST_PACK_4 {
  char AAA;
  char BBB;
  __int32 CCC;
} TEST_PACK_4;
#pragma pack()

#pragma pack(16)
typedef struct _TEST_PACK_H {
  char AAA;
  short BBB;
  __int32 CCC;
  __int32 CCC;
} TEST_PACK_H;
#pragma pack()

typedef struct _TEST_PACK_F {
  char AAA;
  short BBB;
  __int32 CCC;
} TEST_PACK_F;

    printf("sizeof char %X \n", sizeof(char));
    printf("sizeof short %X \n", sizeof(short));
    printf("sizeof __int32 %X \n", sizeof(__int32));
    printf("sizeof TEST_PACK_1 %X \n", sizeof(TEST_PACK_1));
    printf("sizeof TEST_PACK_2 %X \n", sizeof(TEST_PACK_2));
    printf("sizeof TEST_PACK_4 %X \n", sizeof(TEST_PACK_4));
    printf("sizeof TEST_PACK_H %X \n", sizeof(TEST_PACK_H));
    printf("sizeof TEST_PACK_F %X \n", sizeof(TEST_PACK_F));

   

輸出結果:

sizeof char 1
sizeof short 2
sizeof __int32 4
sizeof TEST_PACK_1 7
sizeof TEST_PACK_2 6
sizeof TEST_PACK_4 8
sizeof TEST_PACK_H C
sizeof TEST_PACK_F 8

如何利用 CTags 來快速檢索程式碼?

## 什麼是 CTags?

在程式碼變得龐大時,各種變數與函數的搜尋與快速定位變得好重要,而 CTags 工具就是用來解決這種困擾。

在開始 coding 前先執行 CTags ,讓它把所有指定的程式語言的檔案,將所有變數、函數等等先收集起來儲存到一個索引檔。

CTags 也算是一個古老的工具,最新的一版是 v5.8,2009/07/09放出來的。

https://ctags.sourceforge.net/

https://sourceforge.net/projects/ctags/

下載後可以找到執行檔來使用,裡面也有 ctags.html 來說明各參數的使用方法。

例:

* -R 表示遞迴

* –languages 可指令程式語言

* –langmap 可指令程式語言與要處理索引的相關副檔名

## C 語言可以這樣用

**ctags –langmap=c:.c.h.mak -R %1**

## Python 語言可以這樣用

**ctags -R –fields=+l –languages=python –python-kinds=-iv**

當我們使用支援 CTags 的編輯器時,就可以輕輕鬆鬆瀏覽程式碼啦!

對於XXX,總是學不會嗎?談《大腦喜歡這樣學》

你討厭數學嗎?覺得怎麼樣都學不會嗎?

芭芭拉‧歐克莉(Barbara Oakley)也是這樣,從小學到高中,對於數學敬謝不敏,也就是說能躲就躲。轉向語文方面發展,俄文學得不錯,進入軍職後的升遷之路上,沒想到還是得克服數學這門學問,她決定接受這項命運的挑戰,既然學不來,那就慢慢學吧。

改變了心態,轉換了思考方式,意外的是,數學變得可以理解了。

原來,大腦切換到一個可以適應的學習方法,不用再那麼害怕有壓力。

作者好奇,為何數學之所以難以學習,是因為比起文學更具「抽象性」的觀念。

我們可以用圖片來代表一件物品,但卻難以用單一圖像解釋所有的「加法」與「乘法」。

「乘法」是進行多次的「加法」,等於再次加密的抽象概念。

那麼,學習,尤其是面對自己不擅長的,到底有什麼秘訣呢?

有三個心得來分享一下

專注與發散

大腦的學習運作好比一個彈珠台。

當釘腳緊密排列時,彈珠總是在特定區域打轉,這是專注模式

而釘腳鬆散排列時,彈珠總是能敲出新路徑,這是發散模式

以往我們以為學習必須長時間的堅持不鬆懈,這樣其實只是固定幾組神經元的刺激,久了也疲乏了。

大腦也需要休息,轉移到其他事務或是睡眠,或許看起來像偷懶,其實大腦會默默做資訊重整,就當釘腳從緊密慢慢鬆開,本來打不通的路徑竟然開闢出來。

於是,作者也建議使用「番茄鐘」,為你的學習建立韻律,25分鐘學習、5分鐘休息,有鬆有緊,退後原來是向前。

拖延與意志

你是不是也有某些事情容易拖延呢?想想看為什麼壞習慣總是比好習慣更容易養成呢?

「好,從此時此刻起,我決定不做什麼(壞習慣),要做什麼(好習慣)!」你有沒有常常對自己這麼說呢?

閱讀書中關於拖延的篇章後,我發覺原來我總是想用「意志」來控制自己,但事實上,意志是有限的,過度使用意志是容易讓自己感到能量耗弱,然後再發現事情沒有達成時,再一次打擊自己。

想想我們在執行那些自覺的壞習慣時,是不是很放縱,很開心,這種時候哪有意志出現的餘地。徵結點就在於,怎麼讓自己進入一個「開心」的狀態。例如:想辦法與犒賞捆綁,減少強加的步驟,先邁出最小步,然後休息。以間歇式前進的方式漸漸練習,才能堆疊成果。

圖像與空間

人類的視覺在我們的學習上幫助極大,看看現在網路世界已經進步到到處都是視覺影像。

所以學習記憶的強化兩個Level Up的方法,其一就是利用「圖像式記憶」,另一個是「空間記憶」。

「圖像式記憶」倒不難,現在許多人運用拍照、心智圖、或是作成圖卡,自己手寫的筆記某方面也結合了手腦並用的肌肉記憶。將你需要學習的訊息與有趣、富有畫面的素材加以捆綁,會更加快速。例如,袋鼠的英文諧音是看個路,那麼你就想像袋鼠🦘在馬路上低頭看路。

「空間記憶」則是將你已非常熟悉的場景,把你所需要學習的訊息放置到場景內的各區域。這個需要技巧,我想也需要練習,否則不會有專門開課教授「宮殿記憶法」。這裡讓我想起以前曾有的益智節目,需要在很短的時間內將不相關的方向與數字一一照順序記憶起來,像是左100,右38,上84,…,個人記個三組算是極限了。而使用「宮殿記憶法」的訣竅在於一開始必須撐過空間建造和想像對應的練習,所以學習門檻算是有的。

結論

我看到雙丁麻麻將本書應用在與兩個小學生的課後生活中,掌握大腦學習模式和時間切換技巧,兩者活用後竟可以幫助小朋友找到專注的方式,也算成功避開「從盯功課變成吼媽」的陷阱。非常建議家有小學生的吼媽們也看看《陪讀的刻意練習:養成孩子自主學習的教養魔法》怎麼實踐的。

〈番茄鐘〉適合用來轉換學習與工作的情緒,不過未必要死守25分鐘正事、5分鐘休息的韻律,找到適合自己的節拍或許能更順暢。有位國外資深前端開發者 Nick Bull 就以他的工作心流狀態,發現****69 工作技術(專注工作 52 分鐘,有效休息 17 分鐘)****更適合自己。

這本書也被一些高中、大學拿來教授,原因無他,在學生的日常就是學習,如果有技巧那會是更有效率的學習。已工作的人當然也需要,我最大的心得在於,與其說是更聰明地學習,不如說是了解自己的大腦,懂得在有限的時間內好好使用自己的精力,做好個人能量管理。

至於效率這個議題呢?有的時候覺得難就是難,太過PUSH只是為難自己。作者從接受數學到學會也不是一夜之間。忘記時間的界線,用開放的心態,有意無意反覆接觸你要挑戰的事物。

心情好,學習得更好!

《大腦喜歡這樣學》 A Mind for Numbers

  • 先認識自己的大腦, 找到正確的思考路徑, 就能專注、不拖延, 提高記憶力, 學會如何學習
  • 作者:芭芭拉.歐克莉
  • 出版社:木馬文化事業有限公司
  • 出版日期:2017/09/27

[延伸閱讀]

陪讀的刻意練習:養成孩子自主學習的教養魔法雙丁麻麻,2021/12/24,三民

專案裡的時間觀

這裡紀錄一些在執行產品開發過程中,常見的 acronym。

acronym 是多個單字的第一個字母組成的特別縮寫,在工作日常中常常會用到,但不一定完全了解,有時是邊做邊理會,可能你身邊的人也不一定知道。

用久了,猜一猜或許可以猜到八九成,但何不認真來認識一下呢?

產品周期裡各階段的命名

  • EVT – Engineering Validate Time 工程驗証期,第一份樣版通常需要大量修正
  • DVT – Design Validate Time 設計驗証期,開始確認各項設計是否符合一開始的設定
  • PVT – Product Validate Time 產品驗証期,確認設計後進行問題收斂
  • |- RC – Release Candidate 候選版本
  • |- Golden 黃金樣本
    |- PR – Pilot Run 小量試產,來觀察工廠可能發生什麼問題
  • MP – Mass Production 大量生產,正式成為產品

另一種是偏軟體類型的產品各階段的命名

  • Pre-Alpha
  • Alpha
  • Beta
  • PV
  • RTM – Release to Manufacturing 我自己以為 Ready to Market (HAHAHA)

產品上市後的里程碑

  • EOM – End Of Marketing 停止生產;仍在銷售期
  • EOS – End Of Sale 停止銷售;庫存繼續賣
  • EOL – End Of Life 停止服務;宣告維護終止

與開發周期相關的物料時間點

這邊通常指的是單一樣品 sample 的時間

  • ES – Engineering Sample
  • QS – Qualification Sample
  • Prod – Production
  • RTS – Ready to Ship 可以正式出貨

還有物料往返的時間,明確交待,以便工作御接。

  • ETD – Estimated Time of Delivery 預計寄出時間
  • ETA – Estimated Time of Arrival 預計抵達時間

專案開啟前的規畫相關文件

  • RFQ – Request for Quotation 徵詢廠家的意見,協議報價、時程、項目…
  • RFP – Request of Proposal 需求建議書,通常就是對於這個專案的提案。
  • PCR – Project Change Request 專案的規格以外的變更需求。
  • NDA – Non Disclosure Agreement 保密協議。
  • SOW – Statement of Work 工作說明,通常會說明參與各方的活動與要求。

工作日常信件來往常用單詞

  • AR – Action Required 行動要求,針對單項事務列出負責人與下一步動作。
  • EOB – End Of Business 下班前(個人也有營業時間嗎?)
  • EOD – End of Day 今天以前
  • WFH – Work From Homw 在家工作
  • OOO – Out of Office 不在辦公室,請假時用。
  • TBA – To Be Announced 待公佈
  • TBC – To Be Confirmed 待確認
  • TBD – To Be Determined 待決議

(To Be Continued …)

C# – 如何利用 Console 輸出來協助開發?

在開發 WinForm 程式時,會需要將執行檔移至其它機台驗証。

但我們不會在每個機台都裝上 Visual Studio 來編譯,那麼要如何debug呢?

這時可以利用 Console 輸出來輔助。

首先,要加入正確的 Name Space。

**using System.Runtime.InteropServices;**

再來在程式開始時引用並呼叫 **AllocConsole();**

    public Form1()
    {
        InitializeComponent();

        AllocConsole();

        ...
        [DllImport("kernel32.dll", SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool AllocConsole();

程式執行時,即可利用 **Console.WriteLine()** 等來輸出 debug 訊息。

結束時,記得做 **FreeConsole();**

另外,若程式執行後仍無看到 Console 視窗,可以暫時修改專案屬性來測試。

還要注意一件事,當程式執行時,Console 同時也在運作。

此時若關閉 Console,則程式也會停止執行。

PC 裡為何要自帶 CMOS?

每台電腦都有帶有一顆 CMOS 電池,它的作用在於為了主機板上的[1](揮發性記憶體)晶片供電,來保存[2](使用者的設定)。

另一個主要的功能在於提供一個時鐘功能,也就是 Real-Time Clock (RTC),使 PC 取得一個可靠的參考時鐘得以正常運作。

若移除 CMOS 電池,當 PC **完全** 斷電重新開機後,BIOS 就會進行恢復預設程序,重載出廠設定。另一方面,CMOS 內部儲存的資料會以亂數重置,所以說,RTC 這個時間會是一個隨意的時間值,這樣 PC 就會亂了套,當 PC 開進 OS , OS 會參考這個時間值,但並不一定會完全接受;至於 OS 如何判斷與處置,這是一個黑盒子,無法得知。

CMOS 內部的資料,其實是有一套標準的配置定義表,簡單以 RTC 為例,系統目前的時間分為世紀、年、月、日、時、分、秒等來分別儲存。這些數值的儲存方式不是使用一般的十進位轉十六進位,而是一種叫做 [4](BCD) 格式的方式來儲存,目的是高度的可讀性可以直接了解目前的系統時間。

[圖片來源:http://www.bioscentral.com/misc/cmosmap.htm]

CMOS 資料基本上透過 IO 0x70/0x71 來存取,使用 RW Everything 可以查看。從以下這張範例可以知道,目前系統時間是,2022/1/6 15:26:50。

目前 Microsoft 已經推出了 Windows 10,在使用的過程中發現若是 CMOS Battery 電力消失過久之後再重置, PC 要開進 OS 時有時會發生無法開機的狀況,這是因為 RTC 的世紀 Century 已經被隨機洗成一個不可能的值,像是 99xx 年(現代新電腦過10年能開機要偷笑了),觀察 OS 一直試圖運算卻轉不出一個結果,通常在這種狀況下,OS 已經阿達,必須重新安裝。

最好的處理方法是,若有 CMOS Battery 重置,最好先開進 Setup Menu 確認時間沒有問題再開進 OS。而 Windows 11 也有這樣的現象。

# 參考

[http://www.bioscentral.com/misc/cmosmap.htm](CMOS RAM memory map)

[https://www.techbang.com/posts/58282-why-is-there-a-battery-on-the-computer-board] ([2018/7/4,T客邦,MikaBrea]為什麼電腦主機板上面有電池?很多人可能根本不知道!)

# 備註

[1] **揮發性記憶體***揮發性*的意思是資料的儲存必須靠電力來維持住,一旦沒有電力,則所有資料都會消失。

[2] **使用者的設定**:在古早的 PC 裡大多儲存在 CMOS 中,現由於它是揮發性記憶體,且安全性不足,所以現在已經大多搬到儲存 BIOS 的 SPI Part 等非揮發性記憶a體中。

[3] BCD :

[https://en.wikipedia.org/wiki/Binary-coded_decimal]([WIKI|Binary-coded decimal])