一、課程內容:
概述:實現lcd顯示屏的畫點、畫線、畫圈
1、首先實現畫點:關鍵是如何將需要顯示的點,與視訊記憶體對應起來。
void fb_put_pixel(int x, int y, unsigned int color)
2、接下來就可以畫線畫圈了(這部分**不是講課的內容,copy過來的)
#include "framebuffer.h"
/* *
*/ //-------------畫圓函式。引數:圓心,半徑,顏色----------
// 畫1/8圓 然後其他7/8對稱畫
// ---------------->x
// |(0,0) 0
// | 7 1
// | 6 2
// | 5 3
// (y)v 4
//
// l = x^2 + y^2 - r^2
void draw_circle(int x, int y, int r, int color)
} }
//-----------畫線。引數:起始座標,終點座標,顏色--------
void draw_line(int x1,int y1,int x2,int y2,int color)
x1+=1;
e+=dy;
} }
else // 2/8 octant
y1+=1;
e+=dx;
} }
} else // dy<0
x1+=1;
e+=dy;
} }
else // 7/8 octant
y1-=1;
e+=dx;
} }
}
} else //dx<0
x1-=1;
e+=dy;
} }
else // 3/8 octant
y1+=1;
e+=dx;
} }
} else // dy<0
x1-=1;
e+=dy;
} }
else // 6/8 octant
y1-=1;
e+=dx;
} }
} } }
3、測試函式
#include "geometry.h"
void lcd_test(void)
/* 畫線 */
draw_line(0, 0, xres - 1, 0, 0);
draw_line(xres - 1, 0, xres - 1, yres - 1, 0);
draw_line(0, yres - 1, xres - 1, yres - 1, 0);
draw_line(0, 0, 0, yres - 1, 0);
draw_line(0, 0, xres - 1, yres - 1, 0);
draw_line(xres - 1, 0, 0, yres - 1, 0);
/* 畫圓 */
draw_circle(xres/2, yres/2, yres/4, 0);
}
二、學習要點
1、問;c語言中不同的函式間,引數怎麼呼叫?
答:1)、extern使用,適用於變數的呼叫,陣列之類的;
2)、在各自的檔案中分別為需要呼叫這些引數的函式執行引數獲得函式:適用於獲得結構體得數值或者函式的返回值作為檔案中函式的引數,操作是在各自的檔案中封裝一次返回函式值的函式,在需要用到檔案中函式的另乙個檔案中呼叫被封裝的函式。
例如在測試函式中就要為test.c檔案中的清屏顯示獲得一次引數然後再為framebuffer.c檔案中的點顯示獲得一次引數。有引數傳遞的封裝和無引數傳遞的封裝(init函式,enable函式)是有區別的。傳址解決的是同時產生多個返回值(解析度、x、y這種)解決不了跨檔案傳參。
2、問:指標作為輸入引數時候怎麼定義和引用?
答:定義時:
引用時:
韋東山嵌入式第一期學習筆記DAY 11 13 4
一 課程內容 摘要 本節課主要講解了將之前start.s中的strb,ldrb 單位元組操作 換成str,ldr 4位元組操作 減少硬體的訪問次數和align函式實現的 4位元組對齊 1 問 是怎麼減少硬體訪問次數從而優化strb的?答 使用strb,ldrb若操作16位元組資料硬體總共訪問32次 ...
韋東山嵌入式第一期學習筆記DAY 11 13 5
一 課程內容 摘要 本節課講解了整體的 重定位與位置無關碼,其中重點和難點是位置無關碼。實現第二種方法的 重定位 在第二節課講的第乙個 實現的功能,是分段重定位的,本節講的是整體形式的鏈結指令碼。1 問 位置無關碼怎麼理解?很關鍵,一開始沒理解!答 位置無關碼說白了就是相對跳轉指令與絕對跳轉指令的關...
韋東山嵌入式第一期學習筆記DAY 19 17 6
一 課程內容 完善上節課的程式,實現設定4.3寸lcd的引數與,第一步 設定lcd顯示屏的引數 第二步 寫乙個註冊函式,用於註冊不同型號的lcd顯示器 define lcd num 10 static p lcd params p array lcd lcd num static p lcd par...