在考慮了快一個月之後,我還是下訂了 Kindle Oasis 2。
可惜的是想買的保護套都沒有運送台灣。
運費被收了 USD 20.98,關稅被預收了 USD 14.68。
換算下來大約要 NTD 9600,似乎也沒有比網拍便宜到哪。
但是孩子的學習不能等呀XD
pretty code
2018年12月26日 星期三
2018年12月19日 星期三
MicroPython on UEFI
MicroPython 是一個 Python3 的子集
其目的是用在 microcontrollers 上或是一些受限制的系統
但並不支援所有的語法
MicroPython differences from CPython
tianocore porting MicroPython 目的是用來取代之前 porting 的 Python 2.7
原因是之前 porting 的效能較不好
也不能存取一些 UEFI Services or hardwares
目前專案位於以下路徑
https://github.com/tianocore/edk2-staging/tree/MicroPythonTestFramework/MicroPythonPkg
如果這個東西的成熟度夠高
應該會適合拿來撰寫 UEFI Application
畢竟整套環境是想用來當作 TestFrameWork 用的
其目的是用在 microcontrollers 上或是一些受限制的系統
但並不支援所有的語法
MicroPython differences from CPython
tianocore porting MicroPython 目的是用來取代之前 porting 的 Python 2.7
原因是之前 porting 的效能較不好
也不能存取一些 UEFI Services or hardwares
目前專案位於以下路徑
https://github.com/tianocore/edk2-staging/tree/MicroPythonTestFramework/MicroPythonPkg
如果這個東西的成熟度夠高
應該會適合拿來撰寫 UEFI Application
畢竟整套環境是想用來當作 TestFrameWork 用的
2018年12月14日 星期五
UEFI Application - Stack overflow
最近在幫同事看一個問題
覺得很有趣,故記錄一下解題思路
同事在 build code 時,發現一個 link error
網路查了一下,是因為 VC compiler 檢查到某些 function 有 stack 問題時
便會在 code 中插入 __chkstk 這個 check function
網路看到的解法都是放大 stack size
可以在 INF 檔案編譯選項中加入 /GsXXXXX
但據實測的結果是一點用處都沒有
stack size 還是維持在 32K 左右
後來試著在 INF 檔案編譯選項中加入 /FAcs 選項
此選項會產生 assembly 檔案
副檔名為 .cod
接著在 UDK\Build\程式路徑中
用 grep 搜尋 __chkstk 關鍵字
便可以看到是那個 function 被插入了 __chkstk
底下是我模擬的結果
很明顯的看到 rsp register 被保留了 32776 這麼大的空間(char LocalVar[32768])
當然會造成 stack overflow
覺得很有趣,故記錄一下解題思路
同事在 build code 時,發現一個 link error
正在產生程式碼 已完成程式碼產生 UefiApplicationEntryPoint.lib(ApplicationEntryPoint.obj) : error LNK2001: 無法解析的外部符號 __chkstk
網路查了一下,是因為 VC compiler 檢查到某些 function 有 stack 問題時
便會在 code 中插入 __chkstk 這個 check function
網路看到的解法都是放大 stack size
可以在 INF 檔案編譯選項中加入 /GsXXXXX
但據實測的結果是一點用處都沒有
stack size 還是維持在 32K 左右
後來試著在 INF 檔案編譯選項中加入 /FAcs 選項
此選項會產生 assembly 檔案
副檔名為 .cod
用 grep 搜尋 __chkstk 關鍵字
便可以看到是那個 function 被插入了 __chkstk
底下是我模擬的結果
很明顯的看到 rsp register 被保留了 32776 這麼大的空間(char LocalVar[32768])
當然會造成 stack overflow
2018年12月12日 星期三
Python 正規表示式用法
Python 在使用 re 時
記得 pattern 要包含其他需要的字串(.*)
舉例來說
我想尋找每行有 "ERROR " 字眼的字串
re pattern 要寫成 "ERROR .*"
否則找到的都會只有 "ERROR " 本身
底下是針對規則的進階用法
把想要特別提出來的寫成如下形式
(?P<name>正規表示式)
就可以更方便的找出對應的資料
輸出結果
記得 pattern 要包含其他需要的字串(.*)
舉例來說
我想尋找每行有 "ERROR " 字眼的字串
re pattern 要寫成 "ERROR .*"
否則找到的都會只有 "ERROR " 本身
底下是針對規則的進階用法
把想要特別提出來的寫成如下形式
(?P<name>正規表示式)
就可以更方便的找出對應的資料
import re
ERROR_PATTERN = 'ERROR.*Test: (?P<TEST>[0-9]+).*Address: (?P<ADDR>[0-9A-F]+)'
errMsg = '''
2068-09-12 22:06:48 - [MEM ERROR - Data] Test: 6, CPU: 1, Address: 101B8F330, Expected: FFFF5FFF, Actual: FFFFDFFF
2068-09-12 22:06:48 - [MEM ERROR - Data] Test: 6, CPU: 1, Address: 103B8F310, Expected: FFFF5FFF, Actual: FFFFDFFF
2068-09-12 22:06:50 - [MEM ERROR - Data] Test: 6, CPU: 3, Address: 119FEA5F0, Expected: FFFF7FDF, Actual: FFFFFFDF
2068-09-12 22:06:50 - [MEM ERROR - Data] Test: 6, CPU: 3, Address: 11BFEA5D0, Expected: FFFF7FDF, Actual: FFFFFFDF
2068-09-12 22:20:53 - [MEM ERROR - Data] Test: 6, CPU: 2, Address: 10466E930, Expected: FFFF7FEF, Actual: FFFFFFEF
2068-09-12 22:20:53 - [MEM ERROR - Data] Test: 6, CPU: 2, Address: 10666E910, Expected: FFFF7FEF, Actual: FFFFFFEF
2068-09-12 22:20:53 - [MEM ERROR - Data] Test: 6, CPU: 0, Address: 10D6CC9B0, Expected: FFFF7EFF, Actual: FFFFFEFF
2068-09-12 22:20:53 - [MEM ERROR - Data] Test: 6, CPU: 0, Address: 10F6CC990, Expected: FFFF7EFF, Actual: FFFFFEFF
'''
res = re.findall(ERROR_PATTERN, errMsg)
print(res)
輸出結果
[
('6', '101B8F330'),
('6', '103B8F310'),
('6', '119FEA5F0'),
('6', '11BFEA5D0'),
('6', '10466E930'),
('6', '10666E910'),
('6', '10D6CC9B0'),
('6', '10F6CC990')
]
2018年12月11日 星期二
2018年12月7日 星期五
Single Python executable binary on Windows
I used "PyInstaller" and I used these parameters to build it
"pyinstaller -D -F -w main.py"
My "main.py" is a "wxPython" project and it works well.
Caution: If you use Python 3.7, you will encounter wx._core import error. You can use Python 3.6 to fix this error.
"pyinstaller -D -F -w main.py"
My "main.py" is a "wxPython" project and it works well.
Caution: If you use Python 3.7, you will encounter wx._core import error. You can use Python 3.6 to fix this error.
訂閱:
文章 (Atom)



