發表文章

目前顯示的是 四月, 2017的文章

使用 Serial Port 來除錯的時候請小心

一般來說,程式設計師在除錯的時候常常會用的一種方式就是 print 大法,在程式適當的地方插入一些顯示資訊的指令,提供開發者更多資料來除錯。而在使用這個方法來除錯的時候,有很高的機會是利用 serial port 來顯示信息,特別是在嵌入式系統的開發上。然而當透過 serial port 來印信息的時候有著潛在的風險,因為在工作上遇到了,所以就特別紀錄在下面。首先先來看看下面這一段程式。

1 2 3 4 5 6 7#!/usr/bin/pythonimport sys import time for item in range( 0, 10000, 1 ): print str( item ) + " ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"

這段程式相當的簡單,就只是單純的把一個字串印個 10000 次罷了。然後我們分別透過 SSH 以及 Serial port 連到測試設備上執行這個程式,並利用 time 這個指令來量測時間。結果記錄在下面(省略印字串的輸出)。

SSH:
root@OpenWrt:~# time ./test_print_01.py
real    0m 0.68s
user    0m 0.18s
sys     0m 0.08s

Serial Port (115200):
root@OpenWrt:~# time ./test_print_01.py
real    1m 8.18s
user    0m 0.17s
sys     0m 0.07s

可以發現時間差距非常的多,理由很簡單,因為 serial port 的輸出速度只有 115200 bps(本篇的實驗設備),所以慢也很正常的。問題是,如果今天要除錯的程式是一隻 time critical 的程式,那這就會遇到很大的麻煩。先把程式列在下面:

test_print.py

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31#!/usr/bin/pythonimport sys import time import threadi…