1. 程式人生 > >智慧家居實訓第三天

智慧家居實訓第三天

 ===============================
 練習:圖片翻轉:最後一行的資料和第一行交換
 
=========U盤掛載=============
步驟:1.把這個U盤插到開發板,最左邊的USB介面
      2.使用CRT軟體在終端輸入:cd /mnt
      3.使用ls命令, sd 記憶體卡     udisk U盤
      4.進到udisk裡面: cd udisk
      5.使用複製命令:cp   檔名  路徑
      6.使用cd命令:cd /
     注意:如果在CRT上面,此刻的終端是
     [

[email protected] /mnt/udisk]#
      一定不要插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;

github原始碼