#include // module_init module_exit
#include // __init __exit
#include //register_chrdev file_operations
#include //copy_from_user copy_to_user
#include //ioremap
#include //request_mem_region
#define demo_name "demo_char"
#define gpj0_regbase 0xe0200240
typedef
struct gpj0reg
gpj0_reg_t;
static
int my_major;
gpj0_reg_t *pgpj0reg;
static
int demo_chrdev_open(struct inode *inode, struct file *file)
static
int demo_chrdev_release(struct inode *inode, struct file *file)
static ssize_t demo_chrdev_write(struct file *file, const
char __user *ubuf, size_t count, loff_t *ppos)
; ret = copy_from_user(kbuf,ubuf,count);/*返回值為0成功*/
if(ret)
if(!strcmp(kbuf,"0")) /*亮*/
pgpj0reg->gpj0dat &= ~((1
<<3)|(1
<<4)|(1
<<5));
else
if(!strcmp(kbuf,"1")) /*滅*/
pgpj0reg->gpj0dat |= ((1
<<3)|(1
<<4)|(1
<<5));
else
printk(kern_info "input err\r\n");
printk(kern_info "copy_from_user %s\r\n",kbuf);
return0;}
static
const
struct file_operations demo_fops = ;
static
int __init chrdev_init(void) /*模組安裝*/
printk(kern_info "chrdev_init success.\n");
if(!request_mem_region(gpj0_regbase,sizeof(gpj0_reg_t),"gpj0reg"))/*申請i/o記憶體*/
return -einval;
pgpj0reg = ioremap(gpj0_regbase,sizeof(gpj0_reg_t));/*動態對映*/
return0;}
static
void __exit chrdev_exit(void)/*模組解除安裝*/
module_init(chrdev_init);
module_exit(chrdev_exit);
module_license("gpl");/*描述模組的許可證*/
module_author("xin-ya zhu");/*描述模組的作者*/
module_description("demo test");/*描述模組的介紹資訊*/
module_alias("alias ***");/*描述模組的別名資訊*/
#include
#include
#include
#include //open close
#include
#include
#define file "/dev/demo_text"
#define led_on "0"
#define led_off "1"
int main(void)
; fd = open(file,o_rdwr);
if(fd<0)
write(fd,led_on,strlen(led_on));
sleep(1);
write(fd,led_off,strlen(led_off));
sleep(1);
write(fd,led_on,strlen(led_on));
sleep(1);
write(fd,led_off,strlen(led_off));
sleep(1);
close(fd);
return0;}
/****
****
****
****
****
****
***[root@zhuxinya text]# insmod demo.ko
[15338.775103] chrdev_init success.
[root@zhuxinya text]# mknod /dev/demo_text c 250 0
[15355.778153] demo_chrdev_open
[15355.779573] copy_from_user 0
[15356.782604] copy_from_user 1
[15357.784135] copy_from_user 0
[15358.785707] copy_from_user 1
[15359.787279] demo_chrdev_release
[root@zhuxinya text]# rm /dev/demo_text
[root@zhuxinya text]# rmmod demo.ko
[15379.135901] chrdev_exit
****
****
****
****
****
****
****
*/
自學51微控制器 7 LED點陣學習
3 取模軟體簡單介紹 4 點陣動畫顯示 5.收穫 led點陣由多個led小燈構成,以8 8led點陣介紹,實物圖和內部原理圖如下。圖7 2左側8個引腳為內部led小燈陽極,上側8個引腳為陰極。點亮led點陣與點亮led小燈原理相似,根據led點陣電路圖分析即可,詳細見第三章。利用定時器中斷和數碼管動...
資料結構學習 遞迴與動態程式設計
然後他給出了用陣列實現的乙個計算n個fibonacci數的非遞迴程式,接著說實際只需跟蹤2個值就可以了,因為最後得到f n 只需前兩個值,那就正好跟我上面寫的非遞迴程式一致。接著他還提到了int 型也就是32位整數可以存放的最大fibonacci數為f 45 1836311903然後我用自己的程式算...
動態規劃 資料結構與演算法學習
求最值窮舉 重疊子問題 暴力窮舉效率低下 最優子結構 通過子問題最值得到原問題最值 狀態轉移方程 正確的窮舉 明確 狀態 定義dp陣列 函式的意義 明確 選擇 明確base case fibnacci數列 遞迴 intfib int n 備忘錄解法,自頂向下 intfib int n inthelp...