2019年12月30日 星期一

[python] Why Enclosing Function?




有時候函式某些參數, 可能只要第一次代入後,

而之後呼叫時參數都是相同的, 不希望每次呼叫都要一直代入相同的參數… 



  1. 使用global 變數 ? 程式結構不佳
  2. 使用預設參數? 但預設的又不是我想要的, 也是等於每一次呼叫都要代入
  3. 拿掉該參數? 但因為至少第一次呼叫時可能要代入不同的值, 但拿掉後此函數後就無法有代入參數的能力了


.


更多python程式設計請參考 Python 程式設計

2019年12月16日 星期一

什麼是Device Tree?



什麼是Device Tree?

目前Raspberry Pi 3 的kernel 核心為 4.4.y, 只可以使用 Device Tree 來描述 Internal SoC 及 External (Board level) 的硬體資源.

Device Tree 就是把 Platform Device 架構中用來描述硬體資源的部份給抽出來, 因為Platform Device 的檔案是用C code去描述的, 但概念上硬體資源的描述應和程式無關也與Linux版本無關. 用C 去描述很慘, 因為只要重新定義硬體資源都要重新編譯核心, 很浪費時間. 再來, 要去描述硬體資源,如果不熟悉C的語法, 也很難去寫 ,因為C語法不對會導致編譯失敗。

 Device Tree架構, 解決了上述這些問題, 不用懂C也能定義硬體資源, 如此硬體工程師也可以做了,因為pin 腳拉那根做什麼功能, 硬體工程師最清楚 ,不然做軟體,寫code的人就要自己去對線路圖 (也不是不行, 但如果有對的人做掉, 豈不更快!)


硬體資源: 包含 SoC-level (.dtsi)及 board level (.dts)

  1. 描述CPU, RAM size
  2. 描述 Memory-mapped 上的元件, PWM、UART、I2C、SPI等晶片內部元件的描述, 如暫存器位址及大小, 中斷號碼、DMA,, pinctrl
  3. 描述外部連接裝置, 如裝置規格, 以flash來說,包含 page size, flash size等資訊, 通常寫device driver會從這裡取得裝置資訊. 外部裝置通常使用 device tree overlay (產生.dtbo)的方式而不要直接修改.dts.
Device Tree  
1.  不用重新 compile source code 即可以更改系統的 configuration
2.  當硬體只有小小的更改,只需要 dts 檔小改, 然後再重新編譯出dtb即可。
3.  可以重複使用已存在的 dts 檔在其他地方,也可以覆蓋過去定義的功能
4.  移除 C code ,使得硬體的描述架構更清楚。 




實測:

(1) 加入MCP3008 ADC device到 device tree 中, 會自動掛載 .compatible="mcp3008" 的驅動程式. 

> dtc -@ -I dts -O dtb -o mcp300x.dtbo mcp300x.dts
sudo dtoverlay ./mcp300x.dtbo

(2) 讀取ADC channel 0

cat /sys/bus/iio/devices/iio:device0/in_voltage0_raw





References










2019年12月1日 星期日

好用的PDF度量功能



這可以用來量PCB元件尺寸及其他任何時候你只有PDF的時候..你仍然可以量尺寸
只要透過 Distance  功具, 底下以房屋平面圖來說明..

[Comment] Distance 



















拉的時候..可以同時按下鍵盤的Shift 鍵 , 可以拉出水平及垂直的直線






可以為每一把尺設定自己比例尺  

[ Measuring Tools ]--> [Format ] --> Scale

例如 : 1pt=1.77 公分