以下的紀錄是,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,讓上課學員下載並實際體驗執行結果。
沒有留言:
張貼留言