娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

LED字符設備驅動實例及測試代碼

發布者:MysticJourney最新更新時間:2025-02-05 來源: cnblogs關鍵字:LED  字符設備驅動  測試代碼 手機看文章 掃描二維碼
隨時隨地手機看文章

驅動代碼如下:


#include <linux/kernel.h>//內核頭文件

#include //__init等

#include //模塊加載的頭文件

#include //file_operations

#include //錯誤狀態常數

#include //size_t,ssize_t等


//--------------cdev----------------

#include


//-------------class_create,device_create------

#include


//--------------GPIO-----------------

#include gpio.h>

#include

#include


//-------CMD COMMAND----------------

#define LED1_ON 0x1

#define LED1_OFF 0x0


#define DEVICE_NAME 'LED1'


static int led1_gpios[]=

{

    S5PV210_MP04(4),

    S5PV210_MP04(5),

    S5PV210_MP04(6),

    S5PV210_MP04(7)

};


#define LED1_NUM ARRAY_SIZE(led1_gpios)


/*用udev機制自動添加設備節點*/

struct class *led1_class;


/*設備結構體*/

struct led1_dev_t

{

    struct cdev cdev;

}led1_dev;


/*

// ------------------- READ ------------------------

ssize_t led1_read (struct file * file ,char * buf, size_t count, loff_t * f_ops)

{

    return count;

}    


// ------------------- WRITE -----------------------

ssize_t led1_write (struct file * file ,const char * buf, size_t count, loff_t * f_ops)

{

    return count;

}    

// ------------------- OPEN ------------------------

ssize_t led1_open (struct inode * inode ,struct file * file)

{

    return 0;

}    

// ------------------- RELEASE/CLOSE ---------------

ssize_t led1_release (struct inode  * inode ,struct file * file)

{

    return 0;

}

// -------------------------------------------------

*/


// ------------------- IOCTL -----------------------

static int  led1_ioctl (struct inode * inode ,struct file * file, unsigned int cmd, unsigned long arg)

{

    if(arg > LED1_NUM)

    {

        printk('arg is %u ,led num is %dn',arg,LED1_NUM);

        printk('num is err!!n');

        return - EINVAL;

    }

    switch (cmd)

        {

        case LED1_ON: 

            {

                /*code*/

                gpio_set_value(led1_gpios[arg],0);

                printk('led1 is on!!n');

                break;

            }

        case LED1_OFF:

            {

                /*code*/

                gpio_set_value(led1_gpios[arg],1);

                printk('led1 is off!!n');

                break;

            }

        default :

            {

                printk ('CMD err!!n');

                return - EINVAL;

            }

        }

    return 0;

    

}



struct file_operations led1_fops ={


    .owner   =  THIS_MODULE,

//  .open    =    led1_open,

//    .read    =    led1_read,

//    .write   =  led1_write,

    .ioctl   =    led1_ioctl,

//    .release =    led1_release,

};



// ------------------- INIT ------------------------

static int __init led1_init(void)

{

    printk('led num is : %dn',LED1_NUM);

    int i,ret;

    for (i = 0; i < LED1_NUM; i++)

    {

       

        /*

        ret=gpio_request(led1_gpios[i],'LED1');

        if(ret)//注意,是ret

        {

            printk('%s:request GPIO %d for LED1 failed,ret= %dn',DEVICE_NAME,led1_gpios[i],ret);

            return ret;

        }

        */

        s3c_gpio_cfgpin(led1_gpios[i],S3C_GPIO_SFN(1));

        gpio_set_value(led1_gpios[i],1);

    }

        

    /*init cdev*/

    cdev_init(&led1_dev.cdev,&led1_fops);

    led1_dev.cdev.owner=THIS_MODULE;


    /*向系統動態申請未被占用的設備號*/

    ret = alloc_chrdev_region(&led1_dev.cdev.dev,0,1,DEVICE_NAME);//int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count,const char *name)

    

    if (ret)

    {

        printk('register failedn');    

        return ret;

    }


    /*添加字符設備*/

    ret = cdev_add(&led1_dev.cdev, led1_dev.cdev.dev, 1);

    if (ret)

    {

        printk('cdev add failedn');    

        goto fail1;

    }

    /*udev機制可以自動添加設備節點,只需要添加xxx_class這個類,以及device_create()*/

    led1_class = class_create(THIS_MODULE, 'led1_class');/*在sys目錄下創建xx_class這個類,/sys/class/~*/

    if (IS_ERR(led1_class))

    {

        printk('class create failedn');    

        goto fail2;

    }

    device_create(led1_class, NULL, led1_dev.cdev.dev, DEVICE_NAME, DEVICE_NAME);/*自動創建設備/dev/$DEVICE_NAME*/

    return ret;


fail2:

    cdev_del(&led1_dev.cdev);

fail1:

    unregister_chrdev_region(led1_dev.cdev.dev, 1);

    return ret;

}


static void __exit led1_exit(void)

{

    int i;

    /*

    for (i = 0; i < LED1_NUM; i++)

    {

     

        gpio_free(led1_gpios[i]);

    }

    */

    device_destroy(led1_class, led1_dev.cdev.dev);

    class_destroy(led1_class);

    cdev_del(&led1_dev.cdev);

    unregister_chrdev_region(led1_dev.cdev.dev, 1);

}


module_init(led1_init);

module_exit(led1_exit);


MODULE_LICENSE('GPL');

MODULE_AUTHOR('mhb@seu');


測試代碼如下:


#include

//#include 'sys/types.h'

#include

#include

#include

//#include 'termios.h'

//#include 'sys/stat.h'

#include


#define LED1_ON 0x1

#define LED1_OFF 0x0


main(int argc,char *argv[])

{

    int fd;


    if ((fd=open('/dev/LED1',O_RDWR /*| O_NDELAY | O_NOCTTY*/)) < 0)

    {

        printf('Open Device  failed.rn');

        exit(1);

    }

    else

    {

        printf('Open Device  successed.rn');

    }

    if (argc<3)

    {

        /* code */

        printf('Usage: %s n',argv[0]);

        exit(2);

    }

    if(!strcmp(argv[1],'on'))

    {

        printf('led1 will on!!n');

        printf('argv[2]=%dn',atoi(argv[2]));

       if(ioctl(fd,LED1_ON,atoi(argv[2]))<0)

       {

           printf('ioctl err!!n');     

       }

    

    }

    if(!strcmp(argv[1],'off'))

    {

        printf('led1 will off!!n');

        if(ioctl(fd,LED1_OFF,atoi(argv[2]))<0)

        {

            printf('ioctl err!!n');

        }

    }

    close(fd);

}


關鍵字:LED  字符設備驅動  測試代碼 引用地址:LED字符設備驅動實例及測試代碼

上一篇:Linux下GPIO驅動(五) ----misc_register();
下一篇:Linux下18b20溫度傳感器驅動代碼及測試實例

推薦閱讀最新更新時間:2025-04-23 18:08

FS2410開發板的測試鍵盤的ADS匯編代碼
;匯編指令實驗 ;鍵盤掃描 ; 4X4 矩陣鍵盤 ;四個輸入引腳: EINT0 -----( GPF0 )----INPUT ; EINT2 -----( GPF2 )----INPUT ; EINT11-----( GPG3 )----INPUT ; EINT19-----( GPG11 )----INPUT ; ;四個輸出引腳: KEYSCAN0---( GPE11 )----OUTPUT ; KEYSCAN1---( GPG6 )----OUTPUT ; KEYSCAN2---( GPE13 )----OUTPUT ; K
[單片機]
PLC通過Profibus轉Modbus網關接LED大屏通訊
一、背景 Modbus協議和Profibus協議是兩種常用于工業控制系統的通信協議,它們在自動化領域中起著重要的作用。Modbus是一種串行通信協議,被廣泛應用于各種設備之間的通信,如傳感器、執行器、PLC等。而Profibus則是一種現場總線通信協議,通過集線器連接多個設備,實現數據傳輸 二、Modbus和Profibus各有其特點和適用場景 Modbus適合于小型控制系統,易于實現,成本低廉,具有良好的兼容性和穩定性,廣泛應用于工業自動化領域。而Profibus則更適合大型控制系統,可以連接更多的設備,支持更復雜的控制和監測功能,適用于對通信速度和穩定性有較高要求的場合 三、方案 本文將深入探討如何利用PLC通過Pro
[嵌入式]
PLC通過Profibus轉Modbus網關接<font color='red'>LED</font>大屏通訊
8x8LED點陣+單片機+普中+江科大自化協
1 功能: (1)靜態顯示:顯示一個笑臉; (2)動態顯示:a,移動顯示“HELLO!”,b,顯示笑臉哭臉的變化; 2 原理 3 框圖 4 硬件原理圖 5 軟件設計 5.1 靜態顯示源程序 (1)主函數 #include REGX52.H #include delay100ms.h sbit SER = P3^4; //74HC595的串行數據輸入DS sbit RCK = P3^5; //74HC595的移位寄存器SH_CP sbit SCK = P3^6; //74HC595的鎖存寄存器ST_CP #define matrixled_col P0 //笑臉的數據,列向取模 unsigned
[單片機]
8x8<font color='red'>LED</font>點陣+單片機+普中+江科大自化協
基于STM32單片機點亮LED
1-編寫第一個程序點亮LED燈 下面是原理圖,連接的是PC0-PC7引腳: 1static void Led_Cofig(void) 2{ 3 /*定義一個GPIO_InitTypeDef類型的結構體*/ 4 GPIO_InitTypeDef GPIO_InitStructure; 5 /*開啟LED相關的GPIO外設時鐘*/ 6 RCC_APB2PeriphClockCmd(LED_GPIO_CLCK, ENABLE); 7 /*選擇要控制的GPIO引腳*/ 8 GPIO_InitStructure.GPIO_Pin = LED1_GPIO_PIN; 9 /*設置引腳模式為通用推挽輸出*/
[單片機]
基于STM32單片機點亮<font color='red'>LED</font>燈
STM32F103系列開發_點亮LED
1. 前言 STM32目前市面上使用比較廣泛,資料多,接下來就介紹如何快速入門STM32,進行基礎開發。 這篇文章是STM32F103系列文章的第一篇,主要介紹開發環境的搭建、編程思路、如何查看原理圖、配置時鐘,配置GPIO口模式等等。 下面文字是來至STM32中文手冊,對STM32系列做了詳細的介紹: STM32是一個微控制器產品系列的總稱,目前這個系列中已經包含了多個子系列,分別是: STM32小容 量產品、 STM32中容量產品、 STM32大容量產品和STM32互聯型產品;按照功能上的劃分,又可分為 STM32F101xx、 STM32F102xx和STM32F103xx系列; ● 小容量產品是指閃存存儲器容量在
[單片機]
STM32F103系列開發_點亮<font color='red'>LED</font>燈
單片機AT89C2051制作的LED流水燈電路
一、電路圖 按照下圖購買元器件及面包板,在面包實驗板上參考右圖搭成電路。將已經固化好最簡程序的AT89C2051單片機芯片插到實驗板中縫左右。 LC3911BH型LED數碼管高約13mm,寬10mm,引線排列在兩側,正好能騎插在面包實驗板中縫左右。然后用細硬線按照圖2將數碼管與單片機Pl口連接好,并接入電阻、電容、晶振、按鈕開關等。 下圖中LED數碼管公共陽極接了1只限流電阻。 顯示0—9共10個阿拉伯數字,顯示1時段數最少為2個。設每段電流最大為5mA,則2段總電流I=2×5mA =10 mA,公共限流電阻R=(UCC-ULED)/I=(5V-2V)/10 mA =300Ω 顯示8時段數最多為7個,每段電流最小為10/7
[單片機]
單片機AT89C2051制作的<font color='red'>LED</font>流水燈電路
Mini-LED市場分歧明顯 LED廠商大規模擴產存在隱憂
近兩年,蘋果公司、三星等布局Mini-LED產品,引發行業投資熱潮。就LED廠商紛紛擴大Mini-LED產能規模,以期待市場爆發之際,天風證券分析師郭明錤卻出來給大家潑冷水了。其稱蘋果礙于成本考量,今年將不會推出任何搭載Mini-LED的新品。 業內人士對筆者表示,“蘋果公司的產品策略極大地影響到Mini-LED市場變化,這不僅是其新產品增加Mini-LED需求量,還會引發同行跟隨的問題。若其不再推出Mini-LED新產品,LED廠商大規模擴產將會存在產能過剩的問題。” 市場存在分歧 近年來,隨著蘋果公司推出M1 iPad Pro 、14/16英寸新款MacBook Pro,以及諸如華為智慧屏和一些高端筆記本系列紛紛宣布采用Min
[手機便攜]
三安光電:持續收到國際單一重要大客戶Mini LED芯片采購訂單
3月8日晚間,三安光電發布公告稱,自2022年初以來,公司持續收到國際單一重要大客戶Mini LED芯片采購訂單,金額超17,000萬元,其中2022年1-2月已完成交付金額約10,000萬元,剩余金額將在3月份內交付客戶。公司已就客戶需求的產品組織產能積極生產,以滿足客戶3月份的芯片需求。 此外,三安光電還稱,公司濾波器產品已被國際重要客戶智能手機認證通過,并透過國內ODM廠采購本公司濾波器產品。本次業務的開展標志公司濾波器產品正式進入智能手機供應鏈,為未來產品開拓市場奠定堅實的基礎。 據悉,目前,公司生產經營正常,各項業務有序開展。上述事項進展將對公司2022年第一季度產生積極影響,為未來業務開展奠定基礎;不會對公司業務獨立
[手機便攜]
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 信阳市| 永泰县| 额济纳旗| 七台河市| 河北省| 翁源县| 固镇县| 江阴市| 社会| 思南县| 新沂市| 鹤岗市| 全州县| 苏尼特左旗| 台北市| 玉溪市| 潼关县| 莱州市| 桐庐县| 石嘴山市| 阳山县| 青河县| 忻州市| 油尖旺区| 石阡县| 仁化县| 永德县| 莎车县| 周宁县| 全南县| 永德县| 隆安县| 女性| 桂东县| 忻州市| 大安市| 永修县| 肇州县| 永年县| 泰顺县| 九龙坡区|