2026/01/08

[Python] 自動判斷 並選定 最優 GPU : Intel GPU(Arc A350m) , nVidia GeForce RTX 4060 or CPU

手上 Notebook A 是 Intel Arc 350m , Notebook B 卻是 RTX 4060, 又有 無 GPU 的Notebook ... 
.....嗯嗯... 啥都有~ 就是沒有 AMD GPU :p 
由於 常會更換機器使用,需要一個 能 自動判定/選擇 最佳GPU 的 Python Function   
網路上找許久 都不見有人提供相似功能   
在此紀錄一下, 期待日後介面統一的到來   

另,期待能人志士添加 AMD GPU判定辦法   
暫時使用 DirectML方式偵測 AMD GPU, 功能尚未確認過
AMD使用 DirectML方式 需先安裝:

2025/04/02

CAN Mask & Filter of MCP 2515 calculate

由於 CAN Bus 的 Receiver ID - MCP-2515 具有 2個Mask & 6個Filter 
我們可以善加利用,過濾掉許多不需要的 Message,大大減少 MCP的負擔 
但是,市面上討論 Mask & Filter 的文章超級少,這邊做個紀錄 

◎ 首先, 先理解 Mask & Filter 的功能 : 

1. MCP-2515 有兩個 Mask + 六個Filter , 但是 依據文件說明,並非一個 Mask配三個Filter!
而是: 

* Mask0 配 Filter0 & Filter1 僅有兩個,使用 Buffer0 
* Mask1 配 Filter2 ~ Filter5 共有四個,使用 Buffer1 

由於 ext flag 是分開的, 若有使用 ext的需求,甚至是混合使用的需求的,可以一個mask使用ext=1,另一個使用 ext=0;
ID使用量大的 用Mask1,使用量小的 用Mask0

2. Mask & Filter 計算式: 
當 CAN Bus 收到一 Frame Message, #ID & Mask & Filter 間的關係 計算式:
( #ID & Mask ) ?= ( Filter & Mask ) 
當等式成立時,後端MCU方能順利收到 該條 Message !

◎ 再來, 嘗試依據我們需要收到的 Message ID 反推 需要設定的 Mask & Filter :  

1. 當 需求 ID 僅一個的時候:
Mask = 0x7ff(ext=0, 11 bits)  -or- Mask = 0x1FFFFFFF(ext=1,29 bits) 
Filter = #ID 

2. 當 需求 ID 僅兩個的時候:
我們只需要知道 兩個 ID之間 沒有變動的 bits, 作為 Mask 即可 
  • 期望收到 CAN #ID1 & #ID2 :
    ( ( #ID1 | #ID2 ) & Mask ) ?= ( Filter & Mask )
    Mask := NOT ( ID1 xor ID2 )
    Filter := ID1 -or- Filter := ID2

3. 當 需求 ID 超過兩個的時候:

  • 目標: 找出各ID間 重複出現 0 & 1 的 bits 作為Mask

重複出現 1 的 bit

Mask1 := ( #ID1 and #ID2 and #ID3 and ... )

重複出現 0 的 bit

Mask0 := not ( #ID1 or #ID2 or #ID3 or ... )

重複出現 0 & 1 的 bits

MASK := Mask1 or Mask0 := ( #ID1 and #ID2 and #ID3 and ... ) or ( not ( #ID1 or #ID2 or #ID3 or ... ) )
FILTER := #IDx and MASK


2025/03/16

[Cheat code] Age of Mythology + The Titans

  ◎ 資源類
JUNK FOOD NIGHT增加 1000 食物
TROJAN HORSE FOR SALE增加 1000 木材
ATM OF EREBUS增加 1000 黃金
MOUNT OLYMPUS最大化 Favor 值
ENGINEERED GRAIN提升農田產出/瞬間讓群居動物肥壯
FEAR THE FORAGE行走的金牛莓叢
  ◎ 單位與建築類
WUV WOO召喚飛行的紫色河馬
GOATUNHEIM將所有單位變成山羊
I WANT TEH MONKEYS!!!1!生成 100 隻猴子
BARKBARKBARKBARKBARK生成特殊寵物狗(Basket the dog)
TINES OF POWER生成一個“叉子小子”單位
O CANADA快速熊
L33T SUPA H4X0R所有建築物立即完成
  ◎ 地圖與視野類
SET ASCENDANT揭露整張地圖
LAY OF THE LAND開啟地圖但保留迷霧
UNCERTAINTY AND DOUBT隱藏所有玩家的地圖視野
RED TIDE遊戲中的水變為紅色
LETS GO! NOW!加快(2個空白?)
IN DARKEST NIGHT白天/黑夜
  ◎ 神力與特殊效果類
DIVINE INTERVENTION可以重複使用已使用的神力
WRATH OF THE GODS獲得強大的神力(例如雷電風暴、地震等)
PANDORAS BOX隨機生成一個神力或效果
BAWK BAWK BOOM降下爆炸雞的神力
CONSIDER THE INTERNET立刻增加 10% Favor
ISIS HEAR MY PLEA免費建造所有神廟
  ◎ 關卡
THRILL OF VICTORY立即獲勝
CHANNEL SURFING跳到下一關
  ◎ Titan 專屬
TITANOMACHY召喚一個強大的泰坦單位
MR. MONDAY給泰坦 AI 提供 1000% 增益
TITANS BE GONE快速移除所有泰坦單位
ATLANTEAN NO MORE讓亞特蘭提斯單位轉換為其他文明單位
ZENOS PARADOX讓所有單位移動速度變得非常緩慢
DECONSTRUCTIVE CRITICISM摧毀所有敵方建築物
ATLANTIS REBORN召喚英雄單位 Amanra
RESET BUTTON將所有單位還原到他們的出生地點或起始位置
TINFOIL HAT所有人戴帽

2024/08/22

[NXP][S32K14x 功能安全特性] EIM/ERM 功能驗證

NXP S32K14x 作為一車規級的晶片,晶片本身是支援功能安全相關的特性,晶片的功能安全等級是ASIL-B等級。
從以下功能安全手冊的描述可以看到S32K14x 晶片的FLASH/SRAM 是支援硬體ECC校驗機制,支援 SEC/DED 演算法修正1bit 錯誤及多bit 錯誤檢出機制。

2024/04/29

[NXP][S32K144] CAN UJA1169 SBC chip Hard Reset Circuit Connection

手上有塊 NXP S32K144 EVB,
結果,被用到 原本可以正常 CAN通訊的 被用到 CAN直接無訊號輸出。
想著要針對 SBC的UJA1169 做硬體 Reset, 網路上僅找到 對 S32K118 Reset的文章
找不到針對 144的相關說明

2024/01/30

CAN Bus 工作原理 - 物理層

作為 車用通訊 車用匯流排標準 的 
控制器區域網路 (Controller Area Network,簡稱CAN或者CAN bus) 首先,先了解硬體架構: CAN Bus通訊 僅使用兩條電線相連,一條高電壓,名曰 CAN+(CAN High);
另一條是低電壓,名曰 CAN-(CAN Low) 通常使用 5V電壓,所有設備皆拉兩條 CAN+/-出來,跟別人的CAN+/- 接在一起,
中間並需接上120Ω的電阻,俗稱 終端電阻。 自己的CAN+線 接別人的CAN+線,CAN-接別人的CAN-。 CAN Bus無所謂的 Master/Host,不需要找特定主機 逐一訊問(俗稱Polling)。 只要自己開機完 通訊準備完畢,就可以開始發送訊號。
每條CAN bus上,最少需要兩個設備在線!
因為 通訊中有個ACK訊號,需要別台機器幫忙發送確認。 同時作為他台機器確認收到正確完整封包的指示。 通訊期間,一般不會如同其他Bus般 :
稱呼高低電壓為 0/1(因為CAN+與CAN-恰好電壓是相反的), 而是稱 顯性及隱性 (理由下面說明) 平時無通訊期間,CAN bus上皆為 隱性(1)訊號! 隱性(1) 訊號時, CAN+為低電壓; CAN-為高電壓。 顯性(0)訊號時, CAN+為高電壓; CAN-為低電壓。 CAN bus晶片,僅以CAN+及CAN-之間的電壓差,作為0或1的判定標準;
俗稱: 差分訊號。
例如:
雖然 CAN+有高達 2.8V電壓,但 CAN-此時也有2.4V訊號;
此時CAN chip仍判定Bus上訊號為 隱性(1) 訊號 § 依據 ISO 11898-2規範 :
Vdiff>=1.5V 視為 顯性(0);
Vdiff<=0.5V 視為 隱性(1)。
理解工作原理 才能順利記憶 關於 CAN Bus背後的工作原理: 問:
一條 5V的電線,與一條 0V電線,中間 串接一 120Ω的終端電阻; 斷電後,若不持續外加電壓,此時兩條線的電壓會是多少?