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

TQ210搭載Android4.0.3系統構建之LED從驅動到HAL到JNI到應用程序(驅動篇)

發布者:Qingliu2022最新更新時間:2025-02-14 來源: cnblogs關鍵字:TQ210  LED  HAL  JNI 手機看文章 掃描二維碼
隨時隨地手機看文章

開發板:TQ210


OS:Android 4.0.3


以下所有內容都是在TQ210開發板上實現,并且很多內容也是天嵌公司提供,我將一些內容進行了刪減、替換,然后加入了一些自己的理解,同時也是記錄自己學習的旅程。


廢話不多說 先看硬件電路圖 很簡單 通過NPN三極管控制LED的陰極 NPN三極管的基極給高電平 則三級管導通 則LED等點亮 反之則熄滅

LED驅動源碼


led_unders.c


#include   //包含miscdevice misc_register...

#include //包含__init __exit...

#include   //包含file_operations...

#include //包含EINVAL..

#include //包含S5PV210_GPC0() ...

#include //包含S3C_GPIO_SFN() s3c_gpio_cfgpin() gpio_direction_output()..


#define DEVICE_NAME 'led_unders'  //設備名

#define GPIO_CTIOL_ON 1    //控制LED亮

#define GPIO_CTIOL_OFF 0  //控制LED 滅



static unsigned int gpio_table[]=  //引用I/O引腳

{

S5PV210_GPC0(3), //開發板的手冊上是GPC1 ,是錯的

S5PV210_GPC0(4),

};


static unsigned int gpio_cfg_table[]= //設置IO為輸出

{

S3C_GPIO_SFN(1), //設置引腳為輸出

S3C_GPIO_SFN(1),

};



static int gpio_led_under_open(struct inode *inode,struct file *file) //打開led_unders設備

{

int ret=0,i;

for(i=0;i {

s3c_gpio_cfgpin(gpio_table[i], gpio_cfg_table[i]); //設置引腳為輸出

ret=gpio_direction_output(gpio_table[i],GPIO_CTIOL_OFF); //設置引腳為0

}

if(ret==0) printk('led_open success.n');

else {ret=-1; printk('led_open failed.n');}

return ret;

}



static int gpio_led_under_close(struct inode *inode,struct file *file)

{

printk(KERN_INFO 'led_close success.n');

return 0;

}


static long gpio_led_under_ioctl(struct file *file,unsigned int cmd,unsigned long arg) //控制哪個led燈亮或者滅

{

int ret=0;

printk(KERN_INFO 'led ioctl.n');

arg=arg-1; 

if(arg>sizeof(gpio_table)/sizeof(gpio_table[0])) return -EINVAL; //判斷傳遞的參數是否合法

switch(cmd)

{

case GPIO_CTIOL_ON:

gpio_direction_output(gpio_table[arg],GPIO_CTIOL_ON); //點亮LED

break;

case GPIO_CTIOL_OFF:

gpio_direction_output(gpio_table[arg],GPIO_CTIOL_OFF); //熄滅LED

break;

default:

ret=-1;

printk(KERN_INFO 'led ioctl error');

}

return ret;

}


static struct file_operations dev_fops=

{

.owner=THIS_MODULE,

.unlocked_ioctl=gpio_led_under_ioctl,

.open=gpio_led_under_open,

.release=gpio_led_under_close,

};


static struct miscdevice misc_led=

{ //led混雜設備結構體定義

.minor=MISC_DYNAMIC_MINOR,  //動態分配次設備號

.name=DEVICE_NAME,    //設備名稱

.fops=&dev_fops,    //設備操作結構體

};


static int __init led_init()  //led初始化

{

int ret;

ret=misc_register(&misc_led); //注冊混雜設備成功注冊返回0

if(ret==0) printk(KERN_INFO 'led_init driver success.n');

else { printk(KERN_INFO 'led_init driver failed.n'); ret=-1;}

return ret;

}


static void __exit led_exit() //led卸載

{

int ret=misc_deregister(&misc_led); //卸載混雜設備 ,成功返回0

if(ret==0) printk(KERN_INFO 'led_exit driver success.n');

else printk(KERN_INFO 'led_exit driver failed.n');

}



//模塊入口與出口

module_init(led_init);

module_exit(led_exit);

MODULE_LICENSE('GPL'); //gpl許可

Makefile文件

obj-m :=led_unders.o


KERNELDIR :=~/java/Kernel_3.0.8_TQ210_for_Android_v1.0/

PWD :=$(shell pwd)


build:kernel_module

kernel_module:

make -C $(KERNELDIR) M=$(PWD) modules

clean:

make -C $(KERNELDIR) M=$(PWD) clean

 


Makefile的詳細編寫 參看GUN的Makefile手冊 給一個簡單實例連接 http://www.embedu.org/Column/Column310.htm

該驅動模塊采用混雜設備來表示led設備,通過使用misc_register函數告訴內核misc_led設備所擁有的功能,


對于混雜設備我看了看源碼,個人理解misc_register主要做了三件事,


1.通過MISC_DYNAMIC_MINOR這個標志獲取到次設備號


2.通過class_device_create創建/dev/led_unders設備文件


3.通過list_add將misc_led添加到混雜設備鏈表


測試文件


led_under_driver_test.c


#include

#include    //文件操作


#define DEVICE_NAME '/dev/led_unders'  //設備名稱


#define GPIO_IOCTL_ON 1   //打開led

#define GPIO_IOCTL_OFF 0  //關閉led


#define LED1 1

#define LED2 2



/*

usage: led1/led2 on/off

*/


int main(int argc,char **argv)

{

int fd,ison=0,isnumber=0;

fd=open(DEVICE_NAME,O_RDWR); //以可讀可寫的方式打開設備文件

if(fd<0)  //判斷是否成功打開文件

{

printf('open %s failed.n',DEVICE_NAME);

return 0;

}

if(argc!=3)   //判斷參數是否合法

{

printf('usage:n');

printf('led1/led2 on/offn');

}

if(strcmp(argv[2],'on')==0) ison=GPIO_IOCTL_ON;  //判斷是打開還是關閉LED

else ison=GPIO_IOCTL_OFF;

if(strcmp(argv[1],'led1')==0) isnumber=LED1;  //判斷是操作哪一個LED

else isnumber=LED2;

if(ison!=0&&isnumber!=0) ioctl(fd,ison,isnumber);  //操作led

return 0;

}


通過輸入的參數來控哪個led燈的亮或者滅


編譯文件 Android.mk


LOCAL_PATH :=$(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS :=eng

LOCAL_SRC_FILES :=led_under_driver_test.c

LOCAL_MODULE :=led_unders

LOCAL_MODULE_PATH :=$(LOCAL_PATH)

include $(BUILD_EXECUTABLE)


對于android編譯系統 可以查看官網 http://www.kandroid.org/online-pdk/guide/build_system.html

關鍵字:TQ210  LED  HAL  JNI 引用地址:TQ210搭載Android4.0.3系統構建之LED從驅動到HAL到JNI到應用程序(驅動篇)

上一篇:用定時器去除按鍵抖動
下一篇:TQ210搭載Android4.0.3系統構建之LED從驅動到HAL到JNI到應用程序(HAL篇)

推薦閱讀最新更新時間:2025-04-04 11:58

S5PV210(TQ210)學習筆記——8位HWECC與YAFFS2的OOB布局
最近又重新調試了下8位的HWECC,最后發現S5PV210的8位HWECC的確是可以用的,但是,使用yaffs2文件系統的時候的時候仍然會出問題,這是由于yaffs2文件系統與mtd層的oob布局沖突導致的。 當我們使用8位HWECC時,會生成52字節的ECC校驗數據并寫入oob,而yaffs2自身也有28字節的數據寫日oob,也就是說,至少需要28+52=80字節的oob空間,而對于我們的nand flash,頁大小為2048字節,oob空間為64字節,明顯空間不足,進而導致了我們前面看到的問題,所以,采用8位HWECC時應該選用不使用oob空間的文件系統,如jffs2,但是jffs2文件系統在掛載時比較慢,感覺上不如yaf
[單片機]
STM32CubeMX生成F1的工程中提示找不到 __HAL_TIM_SetCompare 問題
1. 問題描述 在用STM32CubeMX生成 STM32F103C8T6 的MDK工程后,在main.c中更改定時器占空比計數值的時候,報錯: 總之就是HAL庫內部API函數__HAL_TIM_SetCompare找不到。 2. 解決方案 經過搜索,該函數在stm32_hal_legacy.h文件中: 所以出錯原因肯定是:調用此函數的時候沒有包含進來這個頭文件,再次通過文件名查找: 果然,包含此頭文件需要定義宏USE_HAL_LEGACY。 在它前面define一下: 重新編譯,問題解決成功! 這樣添加之后,重新使用STM32CubeMX生成工程后,代碼會被自動覆蓋,需要重新添加!
[單片機]
STM32CubeMX生成F1的工程中提示找不到 __<font color='red'>HAL</font>_TIM_SetCompare 問題
關于stm32串口不定長數據接收(hal庫)的若干問題
使用串口空閑中斷和DMA配合時出現的問題: 問題1.串口接收一旦溢出就會丟數據。 例如串口接收滿了,稍等幾秒再啟動新的DMA接收函數HAL_UART_Receive_DMA時,就丟失數據了,而且是再也收不到串口數據。如果接滿后馬上啟動就沒這個問題。 看官方示例代碼,停止DMA接收后似乎要DeInit后重新初始化Init和啟動DMA接收 解答: 當接收DMA關閉后,此時串口還是激活的,若此時串口來數據,無法觸發DMA傳輸,此時產生上溢錯誤(ORE),由于串口數據寄存器里的數據不能及時轉移走,后面來的數據就進不來。一旦出現這種錯誤后,就不會再觸發DMA請求,即使再開啟DMA也不行。要恢復正常的話就只有Deinit后再重
[單片機]
關于stm32串口不定長數據接收(<font color='red'>hal</font>庫)的若干問題
STM32采用HALHAL_UART_Receive_IT()多次開啟的問題
硬件平臺:STM32F429 軟件平臺:Keil 5 采用HAL庫 本人借鑒了正點原子的例程,在這里表示感謝。 在編寫串口的過程中,遇到了 HAL_UART_Receive_IT(&UART1_Handler, (u8 *)aRxBuffer, 1);1 這個函數,首先是在初始化uart_init(115200)的時候調用了一次。 緊接著,在串口中斷服務函數里,又調用了一次,繼續接收,這樣就不會造成接收完指定的的數據幀長度就不會進入中斷了。如下圖: 在這里,我們需要引入原子哥的一張圖, 由此圖可知: 采用HAL庫,中斷方式接收串口,只有當RxXferCount == 0 時,也就是調用這個函數,接收指定量的數據大小完成
[單片機]
STM32采用<font color='red'>HAL</font>庫<font color='red'>HAL</font>_UART_Receive_IT()多次開啟的問題
意法半導體通過行業認證的HAL固件可簡化嵌入式系統開發
意法半導體(STMicroelectronics,簡稱ST;紐約證券交易所代碼:STM)最新的硬件抽象層(HAL, Hardware Abstraction Layer)固件正式加入 STM32 ARM Cortex -M內核32位微控制器設計生態系統 。新HAL固件是按照MISRA C軟件開發指引及嚴格的ISO/TS16949汽車質量系統管理標準設計開發。 這意味著嵌入式系統開發人員可以期待將意法半導體的低層驅動程序和抽象應用程序接口(API, Application Program Interfaces)導入到自己開發的固件發行版,使之集中精力在開發應用,無需再花費時間調試或重新驗證直至底層驅動的各種代碼。 HAL固件
[嵌入式]
畫餅與分餅——3C電子機器人系統集成商逐鹿天下
  不同于汽車行業的自動化水平已經進入成熟階段,3C產業的自動化滲透率隨著終端產品的不斷迭代仍處于一個上升的通道中。人力成本的壓力以及快速的產品更迭使得自動化生產成為3C制造業的必然趨勢。雖然3C行業增速明顯放緩,但存量市場巨大,2015年全球手機和PC出貨量合計超過22億臺。整體來看,行業的自動化水平較低,同時中高端市場基本由國外壟斷。但在一些細分領域或者專機上,國內的領先企業已經取得了突破,國產化水平正在不斷提升。    市場解讀一:智能手機引領3C自動化新潮   隨著智能手機保有量的逐步提升,智能手機行業已經逐步進入到存量競爭時代,在人工成本逐年上升和制造精度強度加大的疊加影響下,3C自動化改造成為產業發展的必然選擇。3
[機器人]
MSP430 在3V與5V混合系統中的邏輯接口技術
MSP430超低功耗微處理器是TI公司推出的一種新型單片機。它具有16位精簡指令結構,內含12位快速ADC/Slope ADC,內含60K字節FLASH ROM,2K字節RAM,片內資源豐富,有ADC、PWM、若干TIME、串行口、WATCHDOG、比較器、模擬信號,有多種省電模式,功耗特別小,一顆電池可工作10年。開發簡單,仿真器價格低廉,不需昂貴的編程器。 MSP430其特點有:1.8V~3.6V低電壓供電;高效16位RISC CPU可以確保任務的快速執行,縮短了工作時間,大多數指令可以在一個時鐘周期里完成;6微秒的快速啟動時間可以延長待機時間并使啟動更加迅速,降低了電池的功耗。MSP430產品系列可以提供多種存儲器選擇
[單片機]
MSP430 在<font color='red'>3</font>V與5V混合<font color='red'>系統</font>中的邏輯接口技術
先進封裝和3D-IC促進EVG300毫米聚合體自動晶圓鍵合系統銷量
過去的12個月,CMOS圖像傳感器和3D-ICs生產的大幅推動,致使EVG集團該系統的訂單量翻一番 2015年8月31日,奧地利的圣弗洛里安 作為MEMS、納米技術和半導體市場中主要晶圓鍵合和光刻設備供應商的EVG集團,今日稱其300毫米聚合體自動晶圓鍵合系統需求旺盛。過去12個月,該系統新增訂單量已翻一番,其中包括 EVG 560,GEMINI 和EVG 850 TB/DB在內的一系列晶圓鍵合機。這些訂單來自不同性質的企業,包括總部位于亞洲的業內領先半導體專業封測代工(OSAT)供應商。系統需求量的大幅增長離不開先進封裝技術的應用,制造商加大了CMOS圖像傳感器和采用2.5D和3D-IC硅通孔(TSV)互連技術的垂直堆
[半導體設計/制造]
小廣播
設計資源 培訓 開發板 精華推薦

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

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

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 华安县| 澄城县| 马公市| 潞西市| 芷江| 五家渠市| 聂拉木县| 枝江市| 红桥区| 革吉县| 阿拉善左旗| 阳西县| 揭东县| 电白县| 衡水市| 讷河市| 旬邑县| 泗洪县| 原阳县| 烟台市| 兴义市| 盱眙县| 平阴县| 新邵县| 隆昌县| 右玉县| 江源县| 申扎县| 皮山县| 龙游县| 九龙县| 左贡县| 泾阳县| 平凉市| 察雅县| 岑巩县| 比如县| 儋州市| 洪雅县| 兴业县| 杨浦区|