知識社群
登入
中文(台灣)
English(US)
Q&A
線上人數:
473
回首頁
最新活動
(34)
公佈欄
最新公告
近期課程
技術專欄
Android
嵌入式Linux
韌體設計
FPGA / Verilog
站上資源
線上教學
文件總覽
廠商徵才
專業論壇
(1315)
推廣成果
學員專題
Android I/O Workshop
Android 企業產訓專班
活動花絮
(58)
專班學員資訊平台
102年嵌入式軟韌體設計工程師養成班
102年JAVA程式設計班
102Linux網路工程師-LPI認證養成班
嵌入式Linux就業班第二梯次
嵌入式Linux就業班第三梯次
101年 Android設計班(2)
101年 Android設計班(1)
公告
艾鍗學院成立滿十週年了!十年一遇的超值回饋,獻給堅持學習的你~
(03-12)
【2019下半年課程行事曆】政府+企業雙重補助,AI人才養成計劃開跑
(07-10)
IT TRAINING 2019上半年最新技術培訓一覽
(03-13)
[
more
]
最新消息
文件分類
[
總覽
]
廠商徵才資訊
(215)
學員專題成果
(31)
研討會活動專區
(5)
Android 專欄
(19)
活動簡報檔
(2)
線上教學 Training Video
(24)
韌體設計相關
(17)
Embedded LInux 專欄
(54)
Raspberry Pi
(4)
FPGA/Verilog 專欄
(14)
小品文章
(37)
未分類文件
(28)
101年 Android 應用軟體設計班
(4)
基礎C程式&資料結構
(8)
嵌入式Linux就業班第二梯次
(20)
101年臺北市政府勞工局職業訓練中心-Android APP 軟體開發人才培訓就業班
(16)
102年Linux網路工程師-LPI認證養成班
(9)
102年JAVA程式設計班
(2)
102年嵌入式軟韌體設計工程師養成班
(6)
Access VBA
(5)
Excel VBA
(4)
產業訊息
(2)
PCB Layout
(7)
電子電路
(6)
專班文件區
嵌入式Linux就業班第三梯次
(13)
社群資訊
訪客: 3180399
文章: 557
討論: 1315
公告: 31
容量: 剩餘
2.4 GB
(4 GB)
閱讀權限: 開放
分類:
教育學習 / 軟體系統
版主: 艾鍗學院
副版主: 無
位置:
艾鍗學院 Blog
>
專業論壇
>
討論
threads and 切換畫面有殘影
(新,
samlin49@gmail.com
, 2010-12-16 10:49)
1樓
Hi,teacher
想請問一個工作上的問題~
平台是 單核心 arm9+embedded linux2.6.x
系統的產品上因功能的需求, 每項功能皆是個thread~ RFID, lcd 的screen update, KeyPad ....
有event 發生就用 FIFO queues 來以順序排程進而依序執行對應的功能及頁面.
UI的功能是用open source(SDL)這套去用它的api來顯示每個view(background,icon .....)
在切換LCD的頁面時,皆會有先前個畫面的殘影閃一下.
例如~ 按下了key 而 keyPad的thread 這時在處理這個event Queue
此時lcd的screen update的thread,要如何才能show出頁面,快到人的眼睛無法看出殘影?
您的經驗是否有類似問題?
(joseph,
ifang.chen22@msa.hinet.net
, 2010-12-16 22:22)
2樓
若不考慮你的event loop, 先測試
1. 單純地 update 整個frame buffer 會如何? LCD畫面會有殘影嗎 ? 觀察你update 的頻率
2. 透過SDL API, 做1 的動作? LCD畫面會有殘影嗎 ?
----------------
你 uddate FB 的 thead, 其thread 在執行中, 會發生context switch 嗎 ?
event 發生時, 讓你的update FB thread ,可以完整的run完 (不被插斷)之後, 才可以換其他thread跑
(新,
samlin49@gmail.com
, 2010-12-16 23:09)
3樓
Hi, teacher
應該是說切換畫面時,會有短暫斷層的畫面,不是很順。
沒考慮event loop 的情況下
第一項,我沒試. 以前 Non OS的情況下,我是會等V_blank 才切換就不會出現了,但在linux 下 ????
主管說~不用懷疑到低階的韌體,他認為是系統的效能........ 小弟覺得不太是耶!
第二項,用兩個320X240的背景圖,透過SDL API 不斷的切換,就有出現斷層。
不會,每個 thread 會睡不同的時間,會不斷的去看 對應的 Queues是否有工作? 有的話就run也會完整執行完。
我是把問題 看在 SDL 跟 LCD的 Vsync , 但不太知道有linux的平台 怎樣去處理??
QT及MINI GUI 因該也有類似問題,這應該是很有機會發生的問題。
Many tks!
(joseph,
ifang.chen22@msa.hinet.net
, 2010-12-17 00:15)
4樓
1. 單純地 update 整個frame buffer 會如何? LCD畫面會有殘影嗎 ? 觀察你update 的頻率
// open frame buffer device
fb= open("/dev/fb0", O_RDWR);
// get frame buffer memory mapping address
fb_mem = mmap (NULL, 320*240*2,
PROT_READ|PROT_WRITE, MAP_SHARED, fb, 0);
// clear frame buffer
memset(fb_mem, 0, 320*240*2);
for(i=0;I<10;I++) {
// cpoy image to framebuffer
memcpy(fb_mem,COLOR_HEX, 320*240*2);
delay(ms);
}
這樣會不會有問題? 如果不會,那你就要K SDL 了
(新,
samlin49@gmail.com
, 2010-12-17 16:36)
5樓
Hi teacher,
1. 單純地 update 整個frame buffer 會如何? LCD畫面會有殘影嗎 ? 觀察你update 的頻率
我現在用frame buffer 用sleep(1) 每隔一秒show Red, Green, Blue 的320*240 image
就有 畫面斷層的現象.
以前 Non OS的情況下,我是會等V_blank 才切換就不會出現了.....
在linux 觀察 update 的頻率? 要如何測?? 才能對到 vsync?
tks a lot !
(新,
samlin49@gmail.com
, 2010-12-20 15:51)
6樓
Hi teacher,
想了很久~
是不是要在driver動手? 在 xxxfb.c 寫 wait for VSYNC ioctl ?
大概是用irq 針對 vsync的interrupt ?
(joseph,
ifang.chen22@msa.hinet.net
, 2010-12-20 23:34)
7樓
1. 所以問題是
"
畫面斷層
" 切換畫面不夠順. ?
幾個方向:
--> 系統上確定沒有很多AP程式在吃你系統資源,如cpu usage在你還沒跑測試程式之前是低的
--> 若仍只是簡單每秒uddate "局部的"
framebuffer , 還是有同樣的問題碼?
我認為Vsync, Hsync 都不會有問題,若有問題, 你的畫面一開始就偏移了,
若是Driver 的問題, 會出現Drvier軟體的設計上. 我們給的SDK裡的code ,
不會有你說的狀況, 以前用2410也不會. 所以要不要看一下你那邊的Driver 的寫法和我們的有何不一樣?
2. LCD 應該沒有VBLANK 信號
(新,
samlin49@gmail.com
, 2010-12-21 09:22)
8樓
"畫面斷層
,
切換畫面不夠順" 是目前遇到的問題.
我用linux framebuffer 單純去連續更新畫面測試, 就是會
切換畫面不夠順.
" Vsync, Hsync 都不會有問題" 我也認同, 因為靜態的畫面是沒問題的.
以前我也處理過類似的問題, 主要是在 畫面的記憶體source buffer 更新與lcd frame(vsync)的更新要能配合,
我查了一下s3c 的lcd driver 有做了一個 Add wait for VSYNC ioctl, 在static irqreturn_t s3c_fb_irq(int irq, void *dev_id)
有做s3c_fb_wait_for_vsync的處理.
(新,
samlin49@gmail.com
, 2010-12-21 10:34)
9樓
老師, 我應該不能用mcu的角度去看這問題, 加上os 還真的問題難解.
(新,
samlin49@gmail.com
, 2010-12-21 13:17)
10樓
Hi, teacher
主管說不需要想到要去改driver去等vsync, 那是MCU Non-OS的做法...
所以, 我再想想看吧!
我下 ps 也沒有看到很多AP 在跑,
cpu usage在你還沒跑測試程式之前是低的 => 可下指令看嗎?
謝謝了
(新,
samlin49@gmail.com
, 2010-12-21 13:51)
11樓
這是測試程式, 就上傳一下,可供教學用.
謝謝
附件
1.
lcd_test.c
(9 KB)
(joseph,
ifang.chen22@msa.hinet.net
, 2010-12-22 00:44)
12樓
1. 使用 top指令 (busybox) 查看cpu usage
2.
AP <--------> Linux Driver <-------> HAL code <-----> H/W
|<----------------------Kernel ------------------>|
AP是很單純的填資料
gettimeofday (&startTime, NULL);
memcpy (fb, testImage, fbSize);
gettimeofday (&endTime, NULL);
如果連這樣,都是"鈍鈍" 地填滿一個畫面, 那就是
其他的問題. 如果HAL code <-----> H/W 是已經驗證OK的
那你要想....為什麼包了linux driver上去, 會出現這樣的問題...
先思考
3. 你看到只有現象. 你應該還要蒐集現象發生的可能, 接著去驗證你的猜測,
過程當中,你將得到知識並累積經驗.
fb= open("/dev/fb0", O_RDWR);
fb_mem = mmap (NULL, 320*240*2,
PROT_READ|PROT_WRITE, MAP_SHARED, fb, 0);
// clear frame buffer
memset(fb_mem, 0, 320*240*2);
for(i=0;I<10;I++) {
memcpy(fb_mem,COLOR_HEX, 320*240*2);
delay(ms);
memcpy (fb, testImage, fbSize);
gettimeofday (&endTime, NULL);