2019年12月30日 星期一

[python] Why Enclosing Function?




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

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



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


.


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

2019年12月1日 星期日

好用的PDF度量功能



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

[Comment] Distance 



















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






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

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

例如 : 1pt=1.77 公分










2019年11月20日 星期三

[python] dict 依據value排序

不使用內建的sorted()函式, 例如

new_data=sorted(data.items(), key=lambda x: x[1],reverse=True) 


將dict依照value 進行排序 new_data=sort_dict_by_value(data,reverse=True)




2019年10月2日 星期三

Quick guide for building Raspberry Pi kernel 4


For  Driver course (www.ittraining.com.tw)

1) 安裝toolchain (Cross compiler)

# For 32 位元Linux 

export PATH=/home/student/pi/tools/arm-bcm2708/arm-bcm2708-linux-gnueabi/bin:$PATH

# For 64 位元Linux
export PATH=/home/student/pi/tools/arm-bcm2708/arm-bcm2708-linux-gnueabi-x64/bin:$PATH


root@ubuntu:/home/student/pi# arm-linux-gnueabihf-gcc -v

..
gcc version 4.8.3 20140303 (prerelease) (crosstool-NG linaro-1.13.1+bzr2650 - Linaro GCC 2014.03)





2) Linux kernel 編譯

#進入kernel source tree

cd linux  

# 產生 .config


For Raspberry Pi 2, Pi 3, Pi 3+, and Compute Module 3 default build configuration

KERNEL=kernel7
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig

For Raspberry Pi 4
KERNEL=kernel7l
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2711_defconfig

#編譯 Linux kernel、kernel module 及 device tree

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs -j 2
# 安裝  kernel module

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=../modules modules_install



#複製kernel image & dtb 到 Raspberry Pi


sudo cp arch/arm/boot/zImage /boot/$KERNEL.img
sudo cp arch/arm/boot/dts/*.dtb /boot/
sudo cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/


#複製 kernel modules 到 Raspberry Pi


tar zcvf modules.tar.gz  modules

scp modules.tar.gz root@192.168.1.141:/root

tar zxf modules.tar.gz
解開後將 <kernel version> 目錄放到 /lib/modules/


----------------------------------------------------
在 Raspberry Pi 編譯kernel module

1.) copy kernel source to  Raspberry Pi

scp linux-rpi-4.14.98-v7.tar.gz root@192.168.1.157:/root

tar zxf linux-rpi-4.14.98-v7.tar.gz

2.)建立連結到 kernel source

cd /lib/modules/4.14.98-v7
ln -sf  /root/linux-rpi-4.14.98-v7 build




------------------------------------------------------------------------------------
3.) build  driver module from source

cd kernel_driver/01_LED 
.
├── chr_led.c
├── Makefile
└── test.c

make 


├── chr_led.c
├── chr_led.ko
├── chr_led.mod.c
├── chr_led.mod.o
├── chr_led.o
├── Makefile
├── modules.order
├── Module.symvers
└── test.c

發生 fixdep error! Exec format error

進入kernel source 重新產生ARM版本的工具集

cd /root/linux-rpi-4.14.98-v7
make scripts 







4.)   測試 module

#載入模組sudo insmod chr_led.ko

#顯示所有模組
lsmod




#用user應用程式測試driver
gcc test.c -o test

sudo ./test   ==> 你會看見LED 在閃礫

#卸載模組
rmmod chr_led