<dd id="zjcl8"></dd><rp id="zjcl8"></rp>
    <dd id="zjcl8"><track id="zjcl8"></track></dd><em id="zjcl8"></em><rp id="zjcl8"><object id="zjcl8"><blockquote id="zjcl8"></blockquote></object></rp>

  1. <li id="zjcl8"><acronym id="zjcl8"></acronym></li>
  2. <th id="zjcl8"><pre id="zjcl8"></pre></th><tbody id="zjcl8"></tbody>
  3. <tbody id="zjcl8"></tbody>
  4. <rp id="zjcl8"><object id="zjcl8"><blockquote id="zjcl8"></blockquote></object></rp>
    <button id="zjcl8"></button>
    <button id="zjcl8"><acronym id="zjcl8"></acronym></button>
    創作

    完善資料讓更多小伙伴認識你,還能領取20積分哦, 立即完善>

    3天內不再提示

    【i.MX6ULL】驅動開發8—中斷法檢測按鍵 Linux中斷和定時使用方法

    碼農愛學習 ? 來源:碼農愛學習 ? 作者:碼農愛學習 ? 2022-05-25 09:09 ? 次閱讀

    上篇,學習GPIO輸入功能的使用,本篇,來學習使用中斷的方式來檢測按鍵的按下。

    1 Linux中斷介紹

    1.1 中斷的上半部與下半部

    中斷處理函數的執行,越快越好,但實際使用中,某些情況確實需要比較耗時是中斷過程,為此,Linux內核將中斷分為上半部和下半部兩個處理部分

    上半部:中斷處理函數,那些處理過程比較快,不會占用很長時間的處理就可以放在上半部完成

    下半部:如果中斷處理過程比較耗時,那么就將這些比較耗時的代碼提出來,交給下半部去執行,這樣中斷處理函數就會快進快出

    對于一個中斷,如何劃分出上下兩部分呢?

    時間敏感,將其放在上半部

    硬件相關,將其放在上半部

    要求不被其他中斷打斷,將其放在上半部

    其他所有任務,考慮放在下半部

    1.2 下半部的3種實現方式

    1.2.1 軟中斷

    Linux內核使用softirq_action結構體表示軟中斷:

    struct softirq_action 
    { 
    	void (*action)(struct softirq_action *); 
    }; 

    一共有 10 個軟中斷

    enum 
    { 
        HI_SOFTIRQ = 0,          /* 高優先級軟中斷    */ 
        TIMER_SOFTIRQ,           /* 定時器軟中斷      */ 
        NET_TX_SOFTIRQ,          /* 網絡數據發送軟中斷 */ 
        NET_RX_SOFTIRQ,          /* 網絡數據接收軟中斷 */ 
        BLOCK_SOFTIRQ,           
        BLOCK_IOPOLL_SOFTIRQ,    
        TASKLET_SOFTIRQ,         /* tasklet 軟中斷   */ 
        SCHED_SOFTIRQ,           /* 調度軟中斷        */ 
        HRTIMER_SOFTIRQ,         /* 高精度定時器軟中斷 */ 
        RCU_SOFTIRQ,             /* RCU 軟中斷       */ 
            
        NR_SOFTIRQS 
    };

    要使用軟中斷,必須先使用open_softirq函數注冊對應的軟中斷處理函數:

    /**
     * nr: 要開啟的軟中斷
     * action: 軟中斷對應的處理函數
     * return: 無
     */
    void open_softirq(int nr,  void (*action)(struct softirq_action *)) 

    注冊好軟中斷以后需要通過raise_softirq函數觸發:

    /**
     * nr: 要觸發的軟中斷
     * return: 無
     */
    void raise_softirq(unsigned int nr) 

    1.2.2 tasklet

    Linux內核使用tasklet_struct結構體來表示tasklet:

    struct tasklet_struct 
    { 
    	struct tasklet_struct *next;     /* 下一個tasklet      */ 
    	unsigned long state;             /* tasklet狀態        */ 
    	atomic_t count;                  /* 計數器, 記錄對tasklet的引用數 */ 
    	void (*func)(unsigned long);     /* tasklet執行的函數  */ 
    	unsigned long data;              /* 函數func的參數     */ 
    }; 

    要使用 tasklet,必須先定義一個tasklet,然后初始化:

    /**
     * t: 要初始化的tasklet
     * func: tasklet的處理函數
     * data: 要傳遞給func函數的參數
     * return: 無
     */
    void tasklet_init(struct tasklet_struct *t,
                    void (*func)(unsigned long),  
                            unsigned long data); 

    在上半部(中斷處理函數)中調用tasklet_schedule函數就能使tasklet在合適的時間運行:

    /**
     * t: 要調度的tasklet
     * return: 無
     */
    void tasklet_schedule(struct tasklet_struct *t)

    1.2.3 工作隊列

    工作隊列(work queue)是另外一種將中斷的部分工作推后的一種方式,它可以實現一些tasklet不能實現的工作,比如工作隊列機制可以睡眠。

    Linux 內核使用work_struct結構體表示一個工作

    struct work_struct { 
        atomic_long_t data;     
        struct list_head entry;  
        work_func_t func;        /* 工作隊列處理函數  */ 
    };

    這些工作組織成工作隊列,工作隊列使用workqueue_struct結構體表示。

    在工作隊列機制中,將推后的工作交給一個稱之為作者線程(worker thread)的內核線程去完成。

    1.3 中斷API函數

    1.3.1 request_irq中斷請求函數

    /**
     * irq: 要申請中斷的中斷號
     * handler: 中斷處理函數,當中斷發生以后就會執行此中斷處理函數
     * flags: 中斷標志
     * name: 中斷名字
     * dev: 設備結構體
     * return: 0-中斷申請成功, 其他負值-中斷申請失敗
     */
    int request_irq(unsigned int irq,  
                   irq_handler_t handler,  
                   unsigned long flags, 
                      const char *name,  
                            void *dev) 

    flags中斷標志,有下面幾種類型

    中斷標志 描述
    IRQF_SHARED 多個設備共享一個中斷線, 共享的所有中斷都必須指定此標志
    IRQF_ONESHOT 單次中斷,中斷執行一次就結束
    IRQF_TRIGGER_NONE 無觸發
    IRQF_TRIGGER_RISING 上升沿觸發
    IRQF_TRIGGER_FALLING 下降沿觸發
    IRQF_TRIGGER_HIGH 高電平觸發
    IRQF_TRIGGER_LOW 低電平觸發

    1.3.2 free_irq中斷釋放函數

    /**
     * irq: 要釋放中斷的中斷號
     * dev: 設備結構體
     * return: 無
     */
    void free_irq(unsigned int irq,  
                          void *dev) 

    1.3.3 irq_handler_t中斷處理函數

    /**
     * int: 要處理的中斷號
     * void *: 通用指針, 需要與request_irq函數的dev參數保持一致
     * return: irqreturn_t枚舉類型
     */
    irqreturn_t (*irq_handler_t) (int, void *)

    irqreturn_t枚舉類型定義:

    enum irqreturn { 
    	IRQ_NONE          = (0 << 0), 
        IRQ_HANDLED       = (1 << 0), 
    	IRQ_WAKE_THREAD   = (1 << 1), 
    }; 
    
    typedef enum irqreturn irqreturn_t; 

    1.3.4 中斷使能/禁用函數

    /**
     * int: 要使能的中斷號
     */
    void enable_irq(unsigned int irq) 
        
    /**
     * int: 要禁用的中斷號
     */
    void disable_irq(unsigned int irq)

    1.3.5 獲取中斷號

    使用中斷時,中斷信息先寫到了設備樹里面,然后通過irq_of_parse_and_map函數從interupts屬性中提取到對應的中斷號

    /**
     * dev: 設備節點
     * index: 索引號
     * return: 中斷號
     */
    unsigned int irq_of_parse_and_map(struct device_node *dev, 
                                                     int index) 

    2 軟件編寫

    仍使用上篇按鍵實驗中用到的兩個按鍵:

    poYBAGKM90qAILxrAAFjbYSxyjc095.png

    為了理解簡單,本次程序暫不實現中斷的下半部邏輯,直接將整個中斷處理過程都放到中斷的上半部中處理。

    2.1 修改設備樹文件

    在上篇key實驗代碼的基礎上,修改imx6ull-myboard.dts,主要是修改key子節點,添加中斷,修改后內容如下:

    key { 
        #address-cells = <1>; 
        #size-cells = <1>; 
        compatible = "myboard-irq-key"; 
        pinctrl-names = "default"; 
        pinctrl-0 = <&pinctrl_key>; 
        key1-gpio = <&gpio5 1 GPIO_ACTIVE_HIGH>;   /* SW2 */
        key2-gpio = <&gpio5 11 GPIO_ACTIVE_LOW>;   /* SW4 */
        interrupt-parent = <&gpio5>; 
        interrupts = <  1 IRQ_TYPE_EDGE_BOTH
                       11 IRQ_TYPE_EDGE_BOTH >;
        status = "okay"; 
    }; 

    2.2 按鍵中斷驅動程序

    2.2.1 硬件初始化與中斷配置

    static int keyio_init(void)
    {
        unsigned char i = 0;
        int ret = 0;
        
        /* 設備樹中獲取key節點 */
        imx6uirq.nd = of_find_node_by_path("/key");
        if (imx6uirq.nd== NULL)
        {
            printk("key node not find!\r\n");
            return -EINVAL;
        } 
    
        /* 提取GPIO */
        imx6uirq.irqkeydesc[0].gpio = of_get_named_gpio(imx6uirq.nd ,"key1-gpio", 0);
        imx6uirq.irqkeydesc[1].gpio = of_get_named_gpio(imx6uirq.nd ,"key2-gpio", 0);
        if ((imx6uirq.irqkeydesc[0].gpio < 0)||(imx6uirq.irqkeydesc[1].gpio < 0))
        {
            printk("can't get key\r\n");
            return -EINVAL;
        }
        printk("key1_gpio=%d, key2_gpio=%d\r\n", imx6uirq.irqkeydesc[0].gpio, imx6uirq.irqkeydesc[1].gpio);
        
        /* 初始化key所使用的IO,并且設置成中斷模式 */
        for (i = 0; i < KEY_NUM; i++)
        {
            memset(imx6uirq.irqkeydesc[i].name, 0, sizeof(imx6uirq.irqkeydesc[i].name)); /* 緩沖區清零 */
            sprintf(imx6uirq.irqkeydesc[i].name, "key%d", i+1); /* 組合名字 */
            gpio_request(imx6uirq.irqkeydesc[i].gpio, imx6uirq.irqkeydesc[i].name);
            gpio_direction_input(imx6uirq.irqkeydesc[i].gpio);    
            imx6uirq.irqkeydesc[i].irqnum = irq_of_parse_and_map(imx6uirq.nd, i); /* 取到對應的中斷號 */
    
            printk("key%d:gpio=%d, irqnum=%d\r\n",i+1,
                                                  imx6uirq.irqkeydesc[i].gpio, 
                                                  imx6uirq.irqkeydesc[i].irqnum);
        }
        /* 申請中斷 */
        imx6uirq.irqkeydesc[0].handler = key1_handler;
        imx6uirq.irqkeydesc[1].handler = key2_handler;
        imx6uirq.irqkeydesc[0].value = KEY1VALUE;
        imx6uirq.irqkeydesc[1].value = KEY2VALUE;
        
        for (i = 0; i < KEY_NUM; i++)
        {
            /* 中斷請求函數 */
            ret = request_irq(imx6uirq.irqkeydesc[i].irqnum,
                              imx6uirq.irqkeydesc[i].handler,
                              IRQF_TRIGGER_FALLING|IRQF_TRIGGER_RISING,
                              imx6uirq.irqkeydesc[i].name,
                              &imx6uirq);
            if(ret < 0)
            {
                printk("irq %d request failed!\r\n", imx6uirq.irqkeydesc[i].irqnum);
                return -EFAULT;
            }
        }
    
        /* 創建定時器 */
        init_timer(&imx6uirq.timer1);
        imx6uirq.timer1.function = timer1_function;
        init_timer(&imx6uirq.timer2);
        imx6uirq.timer2.function = timer2_function;
        return 0;
    }

    中斷檢測到按鍵按下后,為了消除按鍵抖動,這里使用定時器來進行按鍵消抖,因為本次實驗用到兩個按鍵,所以就先也使用兩個定時器。

    2.2.2 中斷服務函數

    static irqreturn_t key1_handler(int irq, void *dev_id)
    {
        struct imx6uirq_dev *dev = (struct imx6uirq_dev *)dev_id;
    
        dev->timer1.data = (volatile long)dev_id;
        mod_timer(&dev->timer1, jiffies + msecs_to_jiffies(10)); /* 10ms定時 */
        
        return IRQ_RETVAL(IRQ_HANDLED);
    }

    中斷函數檢測到按鍵按下后,會開啟一個10ms的定時器,用來按鍵消抖。

    2.2.3 定時器服務函數

    定時器的10ms到達之后,會觸發定時器服務函數,此時再次讀取按鍵的值,若仍為按下,則是按鍵真的按下了,若10ms后又檢測不到按鍵了,則說明是按鍵抖動導致的按鍵誤觸發。

    void timer1_function(unsigned long arg)
    {
        unsigned char value;
        struct irq_keydesc *keydesc;
        struct imx6uirq_dev *dev = (struct imx6uirq_dev *)arg;
    
        keydesc = &dev->irqkeydesc[0];
    
        value = gpio_get_value(keydesc->gpio); /* 讀取IO值 */
        if(value == 1) /* 按下按鍵 */
        {
            printk("get key1: high\r\n");
            atomic_set(&dev->keyvalue, keydesc->value);
        }
        else /* 按鍵松開 */
        {
            printk("key1 release\r\n");
            atomic_set(&dev->keyvalue, 0x80 | keydesc->value);
            atomic_set(&dev->releasekey, 1); /* 標記松開按鍵,即完成一次完整的按鍵過程 */            
        }    
    }

    2.2.4 按鍵讀取函數

    static ssize_t imx6uirq_read(struct file *filp, char __user *buf, size_t cnt, loff_t *offt)
    {
        int ret = 0;
        unsigned char keyvalue = 0;
        unsigned char releasekey = 0;
        struct imx6uirq_dev *dev = (struct imx6uirq_dev *)filp->private_data;
    
        keyvalue = atomic_read(&dev->keyvalue);
        releasekey = atomic_read(&dev->releasekey);
    
        if (releasekey) /* 有按鍵按下 */
        {
            //printk("releasekey!\r\n");
            if (keyvalue & 0x80)
            {
                keyvalue &= ~0x80;
                ret = copy_to_user(buf, &keyvalue, sizeof(keyvalue));
            }
            else
            {
                goto data_error;
            }
            atomic_set(&dev->releasekey, 0); /* 按下標志清零 */
        }
        else
        {
            goto data_error;
        }
        return 0;
        
    data_error:
        return -EINVAL;
    }

    2.3 按鍵中斷驅動程序

    按鍵中斷的應用程序,使用上篇的按鍵檢測的應用程序即可

    3 實驗

    編譯設備樹與驅動文件(irqkey-BSp.ko),使用上篇的按鍵應用程序(key-App),按下按鍵,會打印get key,松開按鍵,會打印key release。

    pYYBAGKM91iAOQhOAACaYIadQzQ689.png

    4 總結

    本篇主要介紹了Linux中斷的使用方法,通過按鍵來進行中斷實驗測試,并使用Linux定時器進行按鍵去抖。

    poYBAGKM916AeO0CAAD7m3tGRn8927.png

    收藏 人收藏

      評論

      相關推薦

      Extraterm跨平臺終端模擬器

      ./oschina_soft/extraterm.zip
      發表于 05-26 16:52 ? 6次 閱讀
      Extraterm跨平臺終端模擬器

      自連數字一體化手術室方案提供數據高度共享的技術條件

      自連解決方案通過對手術室內各類醫療器械無線聯網升級,例如呼吸機、監測儀、手術顯微鏡、內窺鏡、麻醉站、....
      的頭像 科技綠洲 發表于 05-26 16:42 ? 111次 閱讀

      rj-aux銳捷認證GUI客戶端

      ./oschina_soft/rj-aux.zip
      發表于 05-26 16:40 ? 1次 閱讀
      rj-aux銳捷認證GUI客戶端

      ansiparser前端組件

      ./oschina_soft/ansiparser.zip
      發表于 05-26 16:36 ? 4次 閱讀
      ansiparser前端組件

      統信軟件攜手合作伙伴推出網絡安全解決方案

      近日,統信軟件與北京數字認證、廣電五舟、海量數據、金蝶天燕聯合推出了網絡安全解決方案。  
      的頭像 科技綠洲 發表于 05-26 16:32 ? 89次 閱讀

      TeleportTool訪問Linux服務器集群工具

      ./oschina_soft/teleport.zip
      發表于 05-26 16:30 ? 1次 閱讀
      TeleportTool訪問Linux服務器集群工具

      notty虛擬終端

      ./oschina_soft/notty.zip
      發表于 05-26 16:29 ? 1次 閱讀
      notty虛擬終端

      Babun Windows的SHELL程序

      ./oschina_soft/babun.zip
      發表于 05-26 16:18 ? 1次 閱讀
      Babun Windows的SHELL程序

      Cronnest Crontab管理平臺

      ./oschina_soft/cronnest.zip
      發表于 05-26 16:05 ? 3次 閱讀
      Cronnest Crontab管理平臺

      Tilix Linux平臺終端模擬器

      ./oschina_soft/tilix.zip
      發表于 05-26 16:00 ? 1次 閱讀
      Tilix Linux平臺終端模擬器

      Cowrie記錄包里攻擊者的Shell交互記錄

      ./oschina_soft/cowrie.zip
      發表于 05-26 15:58 ? 3次 閱讀
      Cowrie記錄包里攻擊者的Shell交互記錄

      googler Google搜索的命令行工具

      ./oschina_soft/googler.zip
      發表于 05-26 15:37 ? 1次 閱讀
      googler Google搜索的命令行工具

      WebTerminal基于Web的Linux終端

      ./oschina_soft/gitee-webssh.zip
      發表于 05-26 15:32 ? 1次 閱讀
      WebTerminal基于Web的Linux終端

      Linux內核中Netfilter的設計與實現

      Netfilter (配合 iptables)使得用戶空間應用程序可以注冊內核網絡棧在處理數據包時應....
      的頭像 一口Linux 發表于 05-26 15:27 ? 91次 閱讀

      fish-shell友好交互式shell

      ./oschina_soft/fish-shell.zip
      發表于 05-26 15:27 ? 1次 閱讀
      fish-shell友好交互式shell

      osnssh在Linux/mac終端簡易使用ssh工具自動遠程登錄

      ./oschina_soft/osnssh.zip
      發表于 05-26 15:18 ? 1次 閱讀
      osnssh在Linux/mac終端簡易使用ssh工具自動遠程登錄

      wemux基于tmux的終端共享器

      ./oschina_soft/wemux.zip
      發表于 05-26 15:15 ? 1次 閱讀
      wemux基于tmux的終端共享器

      摩爾線程GPU與中望二三維CAD Linux版產品完成兼容性認證

      近日,摩爾線程MTT S系列GPU與中望二三維CAD Linux版產品完成兼容性認證。
      的頭像 科技綠洲 發表于 05-26 15:06 ? 201次 閱讀

      Final Term終端模擬器

      ./oschina_soft/finalterm.zip
      發表于 05-26 15:02 ? 1次 閱讀
      Final Term終端模擬器

      FreeRDP遠程桌面協議(RDP)工具

      ./oschina_soft/FreeRDP.zip
      發表于 05-26 15:01 ? 3次 閱讀
      FreeRDP遠程桌面協議(RDP)工具

      Shelr控制臺文本錄制和回放工具

      ./oschina_soft/shelr.zip
      發表于 05-26 14:55 ? 1次 閱讀
      Shelr控制臺文本錄制和回放工具

      Caprine第三方跨平臺Facebook Messenger桌面應用

      ./oschina_soft/caprine.zip
      發表于 05-26 14:48 ? 1次 閱讀
      Caprine第三方跨平臺Facebook Messenger桌面應用

      DoChat用于Linux的Docker化微信

      ./oschina_soft/docker-wechat.zip
      發表于 05-26 14:41 ? 1次 閱讀
      DoChat用于Linux的Docker化微信

      BetterDiscord Discord第三方客戶端

      ./oschina_soft/BetterDiscord.zip
      發表于 05-26 14:38 ? 1次 閱讀
      BetterDiscord Discord第三方客戶端

      roby-chatbot語音聊天機器人

      ./oschina_soft/gitee-roby-chatbot.zip
      發表于 05-26 11:31 ? 3次 閱讀
      roby-chatbot語音聊天機器人

      icemapleblueleaves聊天機器人軟件

      ./oschina_soft/gitee-CHAT-ROBOT.zip
      發表于 05-26 11:28 ? 3次 閱讀
      icemapleblueleaves聊天機器人軟件

      minicom Linux終端工具

      ./oschina_soft/minicom.zip
      發表于 05-26 09:09 ? 9次 閱讀
      minicom Linux終端工具

      【i.MX6ULL】驅動開發9——Linux I/O模型分析并進來類比

      本篇介紹了Linux中的五種I/O模型:阻塞式I/O模型、非阻塞式I/O模型、I/O復用模型、信號驅....
      的頭像 碼農愛學習 發表于 05-26 09:05 ? 627次 閱讀
      【i.MX6ULL】驅動開發9——Linux I/O模型分析并進來類比

      Stjerm桌面終端

      ./oschina_soft/stjerm.zip
      發表于 05-26 09:05 ? 11次 閱讀
      Stjerm桌面終端

      請問CH554如何實現SPI從模式的中斷?

      在使用CH554 SPI過程中參考例子使用while(S0_FREE==0),等待主機讀取SPI中的數據,只要讀取沒有發生就一直等待,這...
      發表于 05-26 07:03 ? 16次 閱讀

      使用CH547開發項目,UART0作為與上位機的通訊端口不能工作是為什么?

      現在使用CH547開發項目,需要用到UART0 作為與上位機的通訊端口,但是怎樣設置都不能正常工作,以下是代碼,請各位不吝賜教...
      發表于 05-26 06:58 ? 10次 閱讀

      請問CH32V103R8T6的SPI從機MODF中斷如何清除?

      如題,在數據手冊中沒有找到如何清除SPI的MODF錯誤中斷的方法,開啟了錯誤中斷,為防止該位置死機,需要清除該標志位。 ...
      發表于 05-26 06:30 ? 11次 閱讀

      全志H6開發板香橙派OrangePi 3 LTS在 Linux系統中安裝Home Assistant的方法

      注意事項: 本篇介紹的是通過docker安裝 Home Assistant 的方式,并且只提供在 Ubuntu 或者 Debian 系統中的安裝方法, H...
      發表于 05-25 19:41 ? 1042次 閱讀
      全志H6開發板香橙派OrangePi 3 LTS在 Linux系統中安裝Home Assistant的方法

      NLA自然語言分析的環境部署(一)NLA安裝部署詳細講解

      前段時間為大家介紹的自然語言分析NLA這一項由Smartbi獨家研發的產品功能,在后臺接受到了很多比....
      的頭像 環音儀說數據 發表于 05-25 18:10 ? 218次 閱讀
      NLA自然語言分析的環境部署(一)NLA安裝部署詳細講解

      嵌入式工控主板的應用優勢

      在我國加工制造領域和各種生產領域之中相關的自動化技術應用之下,要求更多專業的控制主板來提高系統運轉的....
      的頭像 kimkylin 發表于 05-25 15:31 ? 21次 閱讀

      嵌入式主板的常見種類及應用領域

      嵌入式主板一般理解為嵌入在設備里面做控制、數據處理使用的CPU板,也就是設備的"大腦"。嵌入式到設備....
      的頭像 kimkylin 發表于 05-25 15:24 ? 62次 閱讀

      關于RT-Thread中斷鎖、調度鎖與死鎖的相關知識介紹

      1 中斷鎖定義中斷鎖即為全局中斷開關,是禁止多線程訪問臨界區最簡單的一種方式,即通過關閉中斷的方式,來保證當前線程不會被其...
      發表于 05-25 15:17 ? 1191次 閱讀

      微型轉換器取代電力軌道集群的方法

        市場正在提供越來越多的帶有硬件加密引擎的高端通用微控制器。然而,僅僅因為微控制器具有硬件加密引擎....
      的頭像 星星科技指導員 發表于 05-25 15:07 ? 78次 閱讀

      RT-Thread的開關中斷是否支持嵌套呢

      1 rtthread開關中斷函數(cortex-m) /* * rt_base_t rt_hw_interrupt_disable(); */ .global rt_hw_interrupt_disable .ty...
      發表于 05-25 15:02 ? 1115次 閱讀

      Linux驅動基礎知識科普

      驅動就是對底層硬件設備的操作進行封裝,并向上層提供函數接口。
      的頭像 一口Linux 發表于 05-25 12:35 ? 245次 閱讀

      振弦采集模塊VM,如何修改通訊速率?

      振弦采集模塊VM系列,如何修改通訊速率?
      發表于 05-25 10:43 ? 1364次 閱讀

      xenomai系統中的xnheap管理機制

      本文分析的enomai系統中的內存池(xnheap)管理機制。
      的頭像 Linux閱碼場 發表于 05-25 10:15 ? 139次 閱讀

      Janus Vim發行版

      ./oschina_soft/janus.zip
      發表于 05-25 10:15 ? 2次 閱讀
      Janus Vim發行版

      bvi二進制/16進制編輯器

      ./oschina_soft/bvi.zip
      發表于 05-25 10:07 ? 6次 閱讀
      bvi二進制/16進制編輯器

      Godit Linux文本編輯器

      ./oschina_soft/godit.zip
      發表于 05-25 10:05 ? 3次 閱讀
      Godit Linux文本編輯器

      Koreader Kindle上的開源閱讀器

      ./oschina_soft/koreader.zip
      發表于 05-25 09:52 ? 5次 閱讀
      Koreader Kindle上的開源閱讀器

      txtreader4linux小說閱讀器

      ./oschina_soft/txtreader4linux.zip
      發表于 05-25 09:39 ? 3次 閱讀
      txtreader4linux小說閱讀器

      nerdtree.vim vim插件

      ./oschina_soft/nerdtree.zip
      發表于 05-25 09:35 ? 3次 閱讀
      nerdtree.vim vim插件

      Tabular在Vim中對齊文本

      ./oschina_soft/tabular.zip
      發表于 05-25 09:33 ? 3次 閱讀
      Tabular在Vim中對齊文本

      litebook簡單好用的看書軟件

      ./oschina_soft/litebook.zip
      發表于 05-25 09:25 ? 1次 閱讀
      litebook簡單好用的看書軟件

      ack文本查找工具

      ./oschina_soft/ack3.zip
      發表于 05-25 09:24 ? 3次 閱讀
      ack文本查找工具

      EasySSH SSH連接管理器

      ./oschina_soft/easyssh.zip
      發表于 05-25 09:17 ? 3次 閱讀
      EasySSH SSH連接管理器

      Linux性能分析工具perf詳解

      系統級性能優化通常包括兩個階段:性能剖析(performance profiling)和代碼優化。
      發表于 05-25 08:55 ? 101次 閱讀
      Linux性能分析工具perf詳解

      如何使用CH32F103C8的systick中斷?

      systick中斷有沒有相關例程?我的delay函數也是用systick做的,systick中斷對它會有影響嗎?   ...
      發表于 05-25 07:30 ? 50次 閱讀

      ch32v1 linux x64工具鏈解壓后文件屬性不對是什么原因?

      這個壓縮包明顯從windows打包的。有人用過嗎,一個一個目錄改太煩躁了! ```sh [calvin RISC-V Embedded GCC/bin...
      發表于 05-25 07:18 ? 64次 閱讀

      全志科技新V853芯片進入正式量產階段

      V853可以說是我們與客戶一起定義的芯片?!比究萍?智能視覺產品總監 陳智翔 介紹到:“在產品規劃....
      的頭像 科技綠洲 發表于 05-24 17:56 ? 840次 閱讀

      觸控工業顯示器內嵌安裝與外嵌安裝如何選

      嵌入式安裝是一種常見的安裝方式,它可以讓兩個物體貼合安裝,形成一個整體,看上去簡潔、美觀且不占空間,....
      發表于 05-24 17:39 ? 7次 閱讀

      AM4379 AM437x ARM Cortex-A9 微處理器 (MPU)

      TI AM437x高性能處理器基于ARM Cortex-A9內核。 這些處理器通過3D圖形加速得到增強,可實現豐富的圖形用戶界面,還配備了協處理器,用于進行確定性實時處理(包括EtherCAT,PROFIBUS,EnDat等工業通信協議)。該器件支持高級操作系統(HLOS)?;贚inux的® 可從TI免費獲取。其它HLOS可從TI的設計網絡和生態系統合作伙伴處獲取。 這些器件支持對采用較低性能ARM內核的系統升級,并提供更新外設,包括QSPI-NOR和LPDDR2等存儲器選項。 這些處理器包含功能方框圖中顯示的子系統,并且后跟相應的“說明”中添加了更多信息說明。 處理器子系統基于ARM Cortex-A9內核,PowerVR SGX™圖形加速器子系統提供3D圖形加速功能以支持顯示和高級用戶界面。 可編程實時單元子系統和工業通信子系統(PRU-ICSS與ARM內核分離,允許單獨操作和計時,以實現更高的效率和靈活性.PRU-ICSS支持更多外設接口和EtherCAT,PROFINET,EtherNet /IP,PROFIBUS,以太網Powerlink,Sercos,EnDat等...
      發表于 09-25 11:51 ? 628次 閱讀
      AM4379 AM437x ARM Cortex-A9 微處理器 (MPU)