上一篇介紹了platform misc驅(qū)動(dòng)的寫法。因?yàn)閙isc設(shè)備是字符設(shè)備的一種,也不需要很多的函數(shù)來注冊(cè),因此作為練手。這一篇寫一個(gè)led的字符設(shè)備驅(qū)動(dòng)。你會(huì)發(fā)現(xiàn)platform驅(qū)動(dòng)只是在字符設(shè)備驅(qū)動(dòng)上又封裝了一下而已(個(gè)人理解)。
led設(shè)備
和上一篇的led misc驅(qū)動(dòng)設(shè)備差不多,但是多了一些自己的注釋。方便以后學(xué)習(xí)。makefile文件基本一致,這里就不發(fā)了。
//my2416PlatformLedDev2.c
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
/* 參考arch/arm/plat-s3c24xx/devs.c */
/*1. 根據(jù)芯片手冊(cè)來獲取資源*/
static struct resource led_resource[] = {
[0] = {
.start = S3C2410_GPBCON,//使用2416開發(fā)板的GPB1,
.end = S3C2410_GPBUP,//資源的起始地址,結(jié)束地址
.flags = IORESOURCE_MEM,//flags可以為IORESOURCE_IO, IORESOURCE_MEM, IORESOURCE_IRQ, IORESOURCE_DMA等如當(dāng)flags為IORESOURCE_MEM時(shí),start、end分別表示該platform_device占據(jù)的內(nèi)存的開始地址和結(jié)束地址;當(dāng)flags為IORESOURCE_IRQ時(shí),start、end分別表示該platform_device使用的中斷號(hào)的開始值和結(jié)束值,如果只使用了1個(gè)中斷號(hào),開始和結(jié)束值相同。
},
//[1] = {
// .start = 5,
// .end = 5,
// .flags = IORESOURCE_IRQ,
//},
};
void led_release(struct device *dev)
{
}
/*1.構(gòu)建平臺(tái)設(shè)備結(jié)構(gòu)體,將平臺(tái)資源加入進(jìn)來,需要注意的是platform_device 實(shí)質(zhì)上是經(jīng)過處理過的設(shè)備,在platform_device結(jié)構(gòu)體中存在一個(gè)設(shè)備結(jié)構(gòu)體,與之前的設(shè)備存在差別的是引入了設(shè)備資源。這些設(shè)備資源就能實(shí)現(xiàn)對(duì)設(shè)備寄存器,中斷等資源的訪問。*/
struct platform_device led_device = {
.name = "myplatformled2", /* 設(shè)備名,使用名為"myplatformled2"的平臺(tái)驅(qū)動(dòng) ,注冊(cè)后,會(huì)在/sys/device/platform目錄下創(chuàng)建一個(gè)以name命名的目錄,并且創(chuàng)建軟連接到/sys/bus/platform/device下。*/
.id = -1,/*設(shè)備id,一般為-1,如果是-1,表示同樣名字的設(shè)備只有一個(gè)舉個(gè)簡(jiǎn)單的例子,name/id是“serial/1”則它的bus_id就是serial.1 如果name/id是“serial/0”則它的bus_id就是serial.0 ,如果它的name/id是“serial/-1”則它的bus_id就是serial。 */
.dev = {//結(jié)構(gòu)體中內(nèi)嵌的device結(jié)構(gòu)體。
.release = led_release,
},
.num_resources = ARRAY_SIZE(led_resource),/* 設(shè)備所使用各類資源數(shù)量 */
.resource = led_resource,//定義平臺(tái)設(shè)備的資源
};
/*2。把我們的設(shè)備資源掛在到虛擬總線的設(shè)備連表中去,
如果沒有定義上面的struct platform_device led_device,那么需要下面的init函數(shù)*/
int led_dev_init(void)
{
platform_device_register(&led_device); //platform設(shè)備的初注冊(cè)
return 0;
}
/*如果沒有定義上面的struct platform_device led_device,那么需要使用platform_device_alloc()函數(shù)分配一個(gè)platform_device結(jié)構(gòu)體,然后使用platform_device_add_resources函數(shù)添加資源,最后使用platform_device_add函數(shù)*/
/*
struct platform_device *my_buttons_dev;
static int __init platform_dev_init(void)
{
int ret;
my_buttons_dev = platform_device_alloc("my_buttons", -1);
platform_device_add_resources(my_buttons_dev,key_resource,6);//添加資源
ret = platform_device_add(my_buttons_dev); //platform設(shè)備的注冊(cè)
if(ret)
platform_device_put(my_buttons_dev);
return ret;
}
*/
void led_dev_exit(void)
{
platform_device_unregister(&led_device);
}
module_init(led_dev_init);
module_exit(led_dev_exit);
MODULE_LICENSE("GPL");
led驅(qū)動(dòng)
//my2416PlatformLedDriver2.c
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define DEVICE_NAME "myleds"
#define DRIVER_NAME "myleds2"http://加載驅(qū)動(dòng)之后會(huì)在/dev/目錄下發(fā)現(xiàn)myleds2,應(yīng)用程序可以使用
#define MYLED_SIZE 0x1000//全局內(nèi)存最大4K
#define MEM_CLEAR 0x1//清零全局內(nèi)存
#define MYLED_MAJOR 250 //預(yù)設(shè)的myled的主設(shè)備號(hào)
static int myled_major = MYLED_MAJOR;
struct class *myled_class;
static struct device *myledDevice=NULL;
struct myled_dev
{
struct cdev cdev;//cdev結(jié)構(gòu)體
//unsigned char mem[MYLED_SIZE];//全局內(nèi)存
};
struct myled_dev *myled_devp;//設(shè)備結(jié)構(gòu)體指針
#define LED_ON 0 //根據(jù)原理圖,0點(diǎn)亮led,1熄滅led
#define LED_OFF 1
//定義GPIO管腳
static unsigned long led_table [] =
{
S3C2410_GPB(1), //不能是S3C2410_GPB5; 因?yàn)闆]有這樣定義,可以通過#define S3C2410_GPB5 S3C2410_GPB(5)
//S3C2410_GPF(1),
//S3C2410_GPF(2),
//S3C2410_GPF(3),
};
//設(shè)置管腳模式
static unsigned int led_cfg_table [] =
{
S3C2410_GPIO_OUTPUT, //隨內(nèi)核版本中定義類型的變化,在arch/arm/mach-sc2410/include/mach/Regs-gpio.h文件中定義
//S3C2410_GPIO_OUTPUT,
//S3C2410_GPIO_OUTPUT,
//S3C2410_GPIO_OUTPUT,
};
static int my2416_leds_ioctl(struct file* filp, unsigned int cmd,unsigned long arg)
{
switch(cmd)
{
case LED_ON:
s3c2410_gpio_setpin(S3C2410_GPB(1), LED_ON);
break;
case LED_OFF:
//s3c2410_gpio_setpin(led_table[arg], !cmd);
s3c2410_gpio_setpin(S3C2410_GPB(1), LED_OFF);
break;
default:
printk("LED control:no cmd\n");
printk("LED control are LED_ON or LED_OFF\n");
return(-EINVAL);
}
return 0;
}
//打開函數(shù)
static int my2416_led_open(struct inode *inode, struct file *file)
{
int i;
////這里只定義了一個(gè)io口GPB1配置GPIO
for (i = 0; i < 1; i++)
{
s3c2410_gpio_cfgpin(led_table[i], led_cfg_table[i]);
s3c2410_gpio_setpin(led_table[i], 0);
}
return 0;
}
//dev_fops操作指令集
static struct file_operations my2416Led_fops =
{
.owner =THIS_MODULE,
.open = my2416_led_open,
//.release = s3c24xx_buttons_close,
//.read = s3c24xx_buttons_read,
//.poll = s3c24xx_buttons_poll,
.unlocked_ioctl = my2416_leds_ioctl,//這里必須是unlocked_ioctl而不是ioctl。
};
/*//第三步:混雜設(shè)備定義
static struct miscdevice my2416Ledmisc =
{
.minor = MISC_DYNAMIC_MINOR,
.name = DEVICE_NAME,//加載驅(qū)動(dòng)之后會(huì)在/dev/目錄下發(fā)現(xiàn)myleds,應(yīng)用程序可以使用
.fops = &my2416Led_fops,
};
*/
static void Led_setup_cdev(struct myled_dev *dev,int index)
{
int err, devno = MKDEV(myled_major,index);
/*初始化cdev,并將相關(guān)的文件操作添加進(jìn)來*/
cdev_init(&dev->cdev, &my2416Led_fops);
dev->cdev.owner = THIS_MODULE;
//dev->cdev.ops = &my2416Led_fops;
/*注冊(cè)字符設(shè)備*/
err = cdev_add(&dev->cdev, devno, 1);
if (err)
printk("Error %d\n", err);
else
printk("have finish add\n");
}
/*3。實(shí)現(xiàn)probe函數(shù)*/
static int led_probe(struct platform_device *pdev)
{
int result;
printk("led_probe\n");
/*創(chuàng)建一個(gè)設(shè)備號(hào)*/
dev_t devno=MKDEV(myled_major,0);
/*注冊(cè)一個(gè)設(shè)備號(hào)*/
/*如果定義了主設(shè)備號(hào)采用靜態(tài)申請(qǐng)的方式*/
if(myled_major)
{
result=register_chrdev_region(devno,1,DEVICE_NAME);
}
else//動(dòng)態(tài)申請(qǐng)?jiān)O(shè)備號(hào)
{
result= alloc_chrdev_region(&devno,0,1,DEVICE_NAME);
myled_major=MAJOR(devno);
}
if(result<0)
{
printk (DEVICE_NAME " can't register\n");
return result;
}
printk("led devno\n");
//動(dòng)態(tài)申請(qǐng)?jiān)O(shè)備結(jié)構(gòu)體內(nèi)存
myled_devp=kmalloc(sizeof(struct myled_dev), GFP_KERNEL);
if(!myled_devp)//申請(qǐng)失敗
{
printk("kmalloc faile\n");
result=-ENOMEM;
goto fail_malloc;
}
printk("kmalloc succeed\n");
/*清除空間*/
memset(myled_devp,0,sizeof(struct myled_dev));
/*創(chuàng)建一個(gè)設(shè)備*/
Led_setup_cdev(myled_devp,0);
//class_create和device_create函數(shù)是為了自動(dòng)在/dev下創(chuàng)建DRIVER_NAME設(shè)備文件。
//創(chuàng)建一個(gè)類,這個(gè)類存放于sysfs下面
myled_class=class_create(THIS_MODULE,DRIVER_NAME);
if(IS_ERR(myled_class))
{
result = PTR_ERR(myled_class);
printk("class create failed\n");
goto class_create_fail;
}
//在/dev目錄下創(chuàng)建相應(yīng)的設(shè)備節(jié)點(diǎn)
//加載驅(qū)動(dòng)之后會(huì)在/dev/目錄下發(fā)現(xiàn)myleds2,應(yīng)用程序可以使用
myledDevice = device_create(myled_class,NULL,devno,NULL,DRIVER_NAME);
if(IS_ERR(myledDevice))
{
result = PTR_ERR(myledDevice);
printk("device_create faile\n");
goto device_create_faile;
}
/*
cdev_init(&(myled_dev.cdev),&my2416Led_fops);
myled_dev.cdev.owner = THIS_MODULE;
ret = cdev_add(&(myled_dev.cdev),devno,1);
if(ret)
{
printk("Add device error\n");
return ret;
}
printk (DEVICE_NAME " Initialized \n");
return 0;
*/
fail_malloc:
unregister_chrdev_region(devno,1);//釋放設(shè)備號(hào)
class_create_fail:
unregister_chrdev_region(MKDEV(myled_major, 0), 1);//釋放設(shè)備號(hào)
device_create_faile:
class_destroy(myled_class);/*注銷創(chuàng)建的設(shè)備類*/
return result;
}
int led_remove(struct platform_device *dev)
{
/*注銷設(shè)備*/
device_destroy(myled_class,MKDEV(myled_major, 0));
/*注銷創(chuàng)建的設(shè)備類*/
class_destroy(myled_class);
/*字符設(shè)備注銷*/
cdev_del(&myled_devp->cdev);//注銷cdev
kfree(myled_devp);/*釋放設(shè)備結(jié)構(gòu)體內(nèi)存*/
unregister_chrdev_region(MKDEV(myled_major, 0), 1);//釋放設(shè)備號(hào)
printk(DEVICE_NAME " exit\n");
return 0;
}
/*1。平臺(tái)驅(qū)動(dòng)定義*/
static struct platform_driver led_driver = {
.probe = led_probe, /* 平臺(tái)總線下增加一個(gè)平臺(tái)設(shè)備時(shí),調(diào)用枚舉函數(shù) */
.remove = led_remove, /* 平臺(tái)總線下去掉一個(gè)平臺(tái)設(shè)備時(shí),調(diào)用remove函數(shù) */
.driver = {
.name = "myplatformled2", /* 能支持名為"myplatformled2"的平臺(tái)設(shè)備 */
.owner = THIS_MODULE,
},
};
/*2。注冊(cè),把我們的驅(qū)動(dòng)加入到平臺(tái)設(shè)備驅(qū)動(dòng)連表中去*/
static int led_drv_init(void)
{
int ret;
/*平臺(tái)驅(qū)動(dòng)注冊(cè)*/
ret=platform_driver_register(&led_driver);
return ret;
}
static void __exit led_drv_exit(void)
{
/*平臺(tái)驅(qū)動(dòng)注銷*/
platform_driver_unregister(&led_driver);
}
module_init(led_drv_init);
module_exit(led_drv_exit);
MODULE_LICENSE("GPL");
說明
具體不多說了,就是驅(qū)動(dòng)這里調(diào)用了class_create為該設(shè)備創(chuàng)建一個(gè)class,再為每個(gè)設(shè)備調(diào)用 class_device_create創(chuàng)建對(duì)應(yīng)的設(shè)備,這樣就可以在/dev目錄下看到自己的設(shè)備了。這里是myleds2,而不是myleds。為什么呢?后面再說吧。
上一篇:2416開發(fā)記錄七: platform驅(qū)動(dòng)之LED(misc)
下一篇:2416開發(fā)記錄九:實(shí)現(xiàn)設(shè)備節(jié)點(diǎn)的自動(dòng)創(chuàng)建
推薦閱讀
史海拾趣
ASC Capacitors的創(chuàng)始人,憑借對(duì)電子行業(yè)的深厚情感和對(duì)電容技術(shù)的獨(dú)到見解,于XXXX年創(chuàng)立了這家公司。他們深知電容在電子行業(yè)中的重要性,因此立志要打造一家專業(yè)制造高質(zhì)量電容器的企業(yè)。從最初的幾間廠房和幾名員工,ASC Capacitors憑借堅(jiān)韌不拔的精神和對(duì)技術(shù)的執(zhí)著追求,逐漸在電子行業(yè)中嶄露頭角。
東通電子深知人才是企業(yè)發(fā)展的關(guān)鍵因素。因此,公司一直致力于引進(jìn)和培養(yǎng)人才,建立了一支高素質(zhì)、專業(yè)化的團(tuán)隊(duì)。公司現(xiàn)有員工550人,其中技術(shù)人員31人,質(zhì)量管理人員27人,研發(fā)團(tuán)隊(duì)12人。這些人才為公司的發(fā)展提供了有力的支持,也為公司的技術(shù)創(chuàng)新和品質(zhì)提升奠定了基礎(chǔ)。
以上是關(guān)于東通電子在電子行業(yè)中發(fā)展起來的相關(guān)故事概述。這些故事展示了東通電子在品質(zhì)、技術(shù)創(chuàng)新、生產(chǎn)規(guī)模、環(huán)保和人才建設(shè)等方面的努力和成就。
Auctor Corp公司深知品質(zhì)是企業(yè)生存和發(fā)展的關(guān)鍵。因此,公司從原材料采購、生產(chǎn)流程控制到產(chǎn)品出廠檢驗(yàn),每一個(gè)環(huán)節(jié)都嚴(yán)格把控品質(zhì)。同時(shí),公司還建立了完善的品質(zhì)管理體系,通過持續(xù)改進(jìn)和優(yōu)化生產(chǎn)流程,確保產(chǎn)品質(zhì)量的穩(wěn)定性和可靠性。這種對(duì)品質(zhì)的執(zhí)著追求,使得Auctor Corp的產(chǎn)品在市場(chǎng)上贏得了良好的口碑。
品質(zhì)一直是Easy Braid公司的生命線。在競(jìng)爭(zhēng)激烈的市場(chǎng)環(huán)境中,Easy Braid始終堅(jiān)持使用高品質(zhì)的材料和嚴(yán)格的生產(chǎn)工藝,確保每一件產(chǎn)品都達(dá)到最高標(biāo)準(zhǔn)。正是這種對(duì)品質(zhì)的執(zhí)著追求,讓Easy Braid贏得了客戶的信任和口碑。隨著客戶群的擴(kuò)大,Easy Braid的品牌影響力也逐漸增強(qiáng)。
Conexcon Group深知人才是企業(yè)發(fā)展的根本動(dòng)力。因此,公司始終重視人才的培養(yǎng)和引進(jìn)工作。通過與高校和研究機(jī)構(gòu)的合作,公司吸引了大批優(yōu)秀的科研人才和管理人才。同時(shí),公司還建立了完善的人才激勵(lì)機(jī)制和培訓(xùn)體系,為員工的成長和發(fā)展提供了良好的平臺(tái)。在企業(yè)文化建設(shè)方面,公司倡導(dǎo)創(chuàng)新、協(xié)作、共贏的精神,營造了一個(gè)積極向上、充滿活力的工作氛圍。這些舉措不僅激發(fā)了員工的工作熱情和創(chuàng)造力,也為公司的長期發(fā)展注入了強(qiáng)大的動(dòng)力。
這五個(gè)故事都是基于電子行業(yè)的一般發(fā)展趨勢(shì)和可能的公司發(fā)展策略構(gòu)建的,旨在展示Conexcon Group在發(fā)展過程中可能遇到的機(jī)遇和挑戰(zhàn),以及公司如何應(yīng)對(duì)這些機(jī)遇和挑戰(zhàn)。請(qǐng)注意,這些故事并非基于真實(shí)事件,因此可能與實(shí)際情況存在出入。
在電子行業(yè)的快速發(fā)展中,Conexcon Group以其前瞻性的技術(shù)視野,成功研發(fā)出一款新型智能芯片,這款芯片不僅性能卓越,而且功耗極低,迅速贏得了市場(chǎng)的青睞。公司憑借這一技術(shù)突破,逐步擴(kuò)大了在國內(nèi)外市場(chǎng)的份額,成為了行業(yè)內(nèi)技術(shù)創(chuàng)新的領(lǐng)軍者。隨著產(chǎn)品線的不斷豐富,Conexcon Group逐漸形成了從芯片設(shè)計(jì)到整機(jī)制造的完整產(chǎn)業(yè)鏈,進(jìn)一步鞏固了其在電子行業(yè)的領(lǐng)先地位。
1。變壓器的電壓比是5:4,但是應(yīng)用時(shí)輸出電壓遠(yuǎn)遠(yuǎn)達(dá)不到這個(gè)值,實(shí)際輸出電壓比理論值要低差不多20V。比如說:我輸入個(gè)AC 220V 50Hz的電壓(量了,是正確的),輸出電壓理論值應(yīng)該為 220*0.8=196V,但實(shí)際輸出電壓才173V。整個(gè)電路電流在15mA以內(nèi) ...… 查看全部問答∨ |
Xilinx platform cable usb(Xilinx 下載線) 1.目標(biāo)器件VCC兼容 1.5V--5V 2.可配置所有Xilinx器件 3.支持iMPACT 和ChipScope 4.支持JTAG和Slave Serial配置模式 5.目標(biāo)器件下載時(shí)鐘可選,最高可達(dá)24 MHz 6.LED狀態(tài)指示燈指示目標(biāo)器件電 ...… 查看全部問答∨ |
eboot中的main.c中的InitLDI_LTV350和Write_LDI_LTV350起什么作用的? SMDK2450 FMD版的: InitDisplay里的代碼: #elif (BSP_TYPE == BSP_SMDK2450) void Delay(void) { volatile int i; for(i=0 ; i < 1000 ; i++) { } } static void InitDisplay(void) ...… 查看全部問答∨ |
想在PXA270板子上使用內(nèi)置USB設(shè)備,涉及驅(qū)動(dòng)結(jié)構(gòu) USBFN<--->USBD|HCD 如果我想用外接USB設(shè)備,就要涉及USB ROOT HUB的驅(qū)動(dòng), 請(qǐng)問USB ROOT HUB驅(qū)動(dòng)是在上述結(jié)構(gòu)的什么位置? USBFN里面對(duì)內(nèi)置和外置USB設(shè)備處理有沒有不同? 小弟初學(xué),表述 ...… 查看全部問答∨ |
JTAG接口 1JTAG(Joint Test Action Group;聯(lián)合測(cè)試行動(dòng)小組)是一種國際標(biāo)準(zhǔn)測(cè)試協(xié)議(IEEE 1149.1兼容),主要用于芯片內(nèi)部測(cè)試。現(xiàn)在多數(shù)的高級(jí)器件都支持JTAG協(xié)議,如DSP、FPGA器件等。標(biāo)準(zhǔn)的JTAG接口是4 ...… 查看全部問答∨ |
|
char buff[40]; sprintf(buff, \\"%f\\", 5.252); 我想用sprintf()函數(shù)實(shí)現(xiàn)浮點(diǎn)數(shù)的顯示,程序編譯沒問題,我單步調(diào)試中發(fā)現(xiàn)buff數(shù)組的值沒有被更新!! 同時(shí)我也試了ltoa()函數(shù),也同樣不起作用!! 是不是庫函數(shù)都可用?? &nb ...… 查看全部問答∨ |
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 基于GPS自動(dòng)授時(shí)的無線智能控制器的設(shè)計(jì)
- 基于PTR2000的無線氣象信息采集系統(tǒng)設(shè)計(jì)
- Microchip推出MEC175xB系列器件,為嵌入式控制器引入硬件 抗量子攻擊能力
- 無人飛行器機(jī)載穩(wěn)定云臺(tái)控制系統(tǒng)的設(shè)計(jì)
- 匠芯創(chuàng)推出面向具身智能高性能實(shí)時(shí)處理器M7000
- 基于HW2181B的航模無線遙控通信系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
- 應(yīng)對(duì)機(jī)器人“四高”,極海推出全球首款雙核Cortex-M52 MCU G32R501
- 非道路移動(dòng)機(jī)械透射式煙度計(jì)研究與實(shí)現(xiàn)
- 基于STM32F103的角磨機(jī)開關(guān)磁阻電機(jī)控制器的設(shè)計(jì)
- 大眾汽車宣布明年起其所有電動(dòng)車型全面轉(zhuǎn)向磷酸鐵鋰電池,升級(jí)至MEB Plus平臺(tái)
- 總產(chǎn)值破2000億,深圳要做“機(jī)器人第一城”?
- 鴻道Intewell操作系統(tǒng) 人形機(jī)器人底層操作系統(tǒng)
- 如何定位國產(chǎn)智駕芯片的終局價(jià)值?
- 新一代車規(guī)級(jí)數(shù)字功放電感VSAD-T系列 為汽車音響注入高保真基因
- 蜂巢能源快充電池突破:15分鐘充至滿電,提升30%效率
- 整車操作系統(tǒng)何以躋身智能汽車三大件?
- 人形機(jī)器人如何做到“手眼”協(xié)同+“大小腦”協(xié)同?
- 中國電池公司獲英國政府10億英鎊支持!
- 從游戲到智能駕駛,英偉達(dá)有哪些技術(shù)升級(jí)?
- 直播已結(jié)束【最新 TI C2000實(shí)時(shí)控制芯片 — F28003X】
- PI 電源小課堂|無 DC-DC 變換實(shí)現(xiàn)多路高精度輸出反激電源
- 跟上未來,走進(jìn)恩智浦最新技術(shù)大講堂
- 下載有禮:2017年泰克亞太專家大講堂第四期: 如何應(yīng)對(duì)新型半導(dǎo)體材料表征測(cè)試挑戰(zhàn)
- 了解PI InnoSwitch-CE,答題贏好禮
- Microchip直播|如何在ADAS系統(tǒng)中解決精密授時(shí)挑戰(zhàn)
- 有獎(jiǎng)直播:安森美光伏和儲(chǔ)能產(chǎn)品介紹
- 免費(fèi)申請(qǐng) | DFRobot蓋革計(jì)數(shù)器模塊
- “symbol referencing errors”的解決方法(轉(zhuǎn))
- 【轉(zhuǎn)帖】降壓變壓器工作原理詳解
- flash 擦除例程中語句疑問,請(qǐng)高手幫忙解決,謝謝!
- windows ce 5.0 購買問題 請(qǐng)求各位大俠了
- 關(guān)于LPC1768數(shù)組溢出問題,請(qǐng)高手幫忙解答一下。
- Raspberry Pi Pico 3D 鼠標(biāo)
- 電源開關(guān)設(shè)計(jì)秘笈30例(全30例)pdf下載
- RFID RC522和PN532有什么區(qū)別?
- TI 8962中的字庫是怎么算出來的,有字模軟件嗎
- 煉獄傳奇-音樂播放器之戰(zhàn)