智慧家居實訓第三天
===============================
練習:圖片翻轉:最後一行的資料和第一行交換
=========U盤掛載=============
步驟:1.把這個U盤插到開發板,最左邊的USB介面
2.使用CRT軟體在終端輸入:cd /mnt
3.使用ls命令, sd 記憶體卡 udisk U盤
4.進到udisk裡面: cd udisk
5.使用複製命令:cp 檔名 路徑
6.使用cd命令:cd /
注意:如果在CRT上面,此刻的終端是
[
一定不要插U盤,無法讀取
=============================
檔案的偏移 lseek
理論上來說:圖片的大小=800*480*3=1152000位元組
實際上它是: 1152054 多出來54位元組 =14位元組+40位元組
14位元組:圖片的名字 40位元組:圖片的屬性
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
返回值:成功 返回 一個偏移量
失敗 返回 -1
引數:int fd 檔案描述符
off_t offset 檔案偏移量 位元組
int whence
SEEK_SET 開始位置
SEEK_CUR 當前位置
SEEK_END 結束位置
=============記憶體對映===============
1.記憶體對映的函式 mmap()
直接將記憶體對映到lcd螢幕,提高效率
#include <sys/mman.h>
記憶體對映
void *mmap(void *addr, size_t len, int prot, int flags,
int fildes, off_t off);
返回值:成功 返回一個指向對映成功的那片地址空間的首地址0
失敗 返回 NULL
引數 :void *addr addr你要寫的對映的首地址,一般設定為NULL
size_t len 你要對映的地址的大小 單位:位元組
int prot 設定許可權
PROT_READ 只讀 Data can be read.
PROT_WRITE 只寫 Data can be written.
PROT_EXEC 執行 Data can be executed.
PROT_NONE 無許可權 Data cannot be accessed.
int flags
MAP_SHARED 可以共享 Changes are shared.
MAP_PRIVATE 不可共享 Changes are private.
int fildes 你要對映的硬體設的檔案描述符
off_t off 偏移量,一般設定為0
2.解除對映 munmap
#include <sys/mman.h>
int munmap(void *addr, size_t len);
引數:void *addr addr你要寫的對映的首地址,一般設定為NULL
size_t len 你要對映的地址的大小 單位:位元組
任意位置任意大小
1.格式錯誤:bmp格式
2.雖然是任意大小,但是別太任性,因為你要滿足圖片 w/4=整
3.路徑不要錯
============輸入子系統=================
觸控式螢幕:電阻屏 諾基亞、金立
電容屏 智慧手機
觸控事件:外接裝置(鍵盤/滑鼠/觸控式螢幕)
接入第三平臺,當這些裝置狀態發生改變的時候,我們稱這個樣的事件為觸控事件
輸入子系統:分析事件,得出事件的型別/編碼/值
輸入子系統的標頭檔案路徑: vi /usr/include/linux/input.h
struct input_event
{
struct timeval time;//事件發生的時間
__u16 type;//事件的型別
__u16 code;//事件的編碼,進一步對型別進行描述
__s32 value;//事件的值
}
對linux來講,這個事件是可以用結構體歸納,
所以這些事件就用結構體來包裹
事件的型別
#define EV_KEY ------->按鍵型別
#define EV_ABS ------->觸控式螢幕的型別
事件的編碼
#define ABS_X -----》觸控式螢幕的x軸
#define ABS_Y -----》觸控式螢幕的y軸
#define ABS_PRESSURE ----》獲取壓力值
事件的值:
value:由code決定
code:ABS_X -------》value:800
code:ABS_Y -------》value:480
code:ABS_PRESSURE -------》value:0-200
計算記憶體大小,使用sizeof()
例子:
struct A
{
int a;
char b;
};
struct A B;
呼叫:
1.點的方式呼叫
B.a;
2.箭頭方式呼叫
B->a;