2012年5月23日 星期三

2012/5/23 上課記實(課堂實作驅動程式 ioctl、lseek、dely、Timtout)--新竹班[嵌入式Linux系統之操作實務/程式設計/ Device Driver精修實務班]

以下的紀錄是,2012年5月23日 晚上的上課記趣。


下列程式碼是 ioctl 驅動程式範例的AP端程式,改自readwriteAP程式,程式碼如下:
int main()
{
  int fd;
 char BUF[32];
 char writeStr[32]="CYH";
 ssize_t readLen;
 fd = open ( "/dev/LED" , O_RDWR  ); // /dev/LED -> 88 -> ... -> LED_open
 
 //write ( fd , (void *)"CYH", 4 );
 // BUF[] = ...
 ioctl ( fd , writeCMD , (unsigned long)writeStr );
 
 //readLen = read ( fd , (void *)BUF, 32 );
 readLen = ioctl ( fd , readCMD , (unsigned long)BUF) ; 
 BUF[readLen]='\0';
 printf( "BUF=%s\r\n" , BUF );


 close( fd );
  return 0;
}
而 ioctl 驅動程式課堂實作,業已于上課時完成現場CODING,上傳至FTP,並讓上課學員下載並實際體驗執行結果。


接著講解lseek驅動與AP須注意事項,有學員同時要求需要實作範例,我接著課堂上實作lseek驅動Driver 程式,及完成lseek AP端程式範例。
int main()
{
  int fd;
 char BUF[32];
 ssize_t readLen;
 fd = open ( "/dev/LED" , O_RDWR  ); // /dev/LED -> 88 -> ... -> LED_open
 
 write ( fd , (void *)"CYH_567890123456789012", 23 );
 // BUF[] = ...
 memset( BUF, 0, 32 );
 readLen = read ( fd , (void *)BUF, 10 );
 BUF[readLen]='\0';
 printf( "1.readLen=%d, BUF=%s\r\n" , readLen, BUF );
 
 lseek ( fd , 2 , SEEK_CUR);
 
 memset( BUF, 0, 32 );
 readLen = read ( fd , (void *)BUF, 10 );
 BUF[readLen]='\0';
 printf( "2.readLen=%d, BUF=%s\r\n" , readLen, BUF ); 
 close( fd );
  return 0;
}
而 lseek 驅動程式課堂實作,業已于上課時完成現場CODING,並上傳至FTP,讓上課學員下載並實際體驗執行結果。


再來的進度是講解 Flow of Time, 在 Flow of Time 是先說明 HZ、Tick、Jiffies之關係,之後以 jiffies 說明其用法,包含Delay方式。並於課堂實作 1.Busy Wait範例, 2. schedule() Delay法, 3.wait event timeout Delay範例。這些範例,也于上課時完成現場CODING,並測試成功,及上傳至FTP,讓上課學員下載並實際體驗執行結果。


沒有留言:

張貼留言

FPGA Verilog 的學習經驗,提供給要入門的新手

今天簡單說說 FPGA Verilog 的學習經驗,提供給要入門的新手: 1.對自己寫的FPGA Verilog程式,所生成的數位電路要心中有數。 這一點個人認為很重要,就正如寫 C語言,心中要能生成對應的組合語言一樣,我是這樣要求自己的。 雖然 FPGA Verilog語言...