历史上的今天
返回首页

历史上的今天

今天是:2025年04月15日(星期二)

正在发生

2018年04月15日 | TQ2440移植u-boot-2010.06-rc1---6usb下载

2018-04-15 来源:eefocus

以前做过usb下载的东东,现在把它搞到u-boot-2010.06-rc1上去.

网上有usb下载的代码,可以在这儿下载:

http://blogimg.chinaunix.net/blog/upfile2/100109001526.bz2

一. 先编译过再说

1.下载后,解压到u-boot-2010.06-rc1/drivers/usb/slave目录

并在顶层Makefile中添加: LIBS += drivers/usb/slave/libusb_slave.a

2. 将driver/usb/slave/目录下所有C文件所个替换

  1. a. 

  2. #if defined(CONFIG_S3C2400)

  3. #include 

  4. #elif defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)

  5. #include 

  6. #endif

  7. #include

  8. 替换为

  9. #include

  10. b. 删除driver/usb/slave/interrupt.c

  11. c. 修改driver/usb/slave/Makefile中的 COBJS, 去掉interrupt.o

3.u-boot-2010.06-rc1中结构体都是小写,跟下载的代码中结构体名字是大写的,需要将大写的名字改成小写的,这样才可以编译过去.

  1. a. 将usbin.c中 

  2. L21

  3.     /* 

  4.     extern S3C24X0_USB_DEVICE * usbdevregs;

  5.     extern S3C24X0_DMAS * dmaregs;

  6.     */

  7.     extern struct s3c24x0_usb_device * usbdevregs;

  8.     extern struct s3c24x0_dmas * dmaregs;

  9. L32 解决: warning: suggest parentheses around arithmetic in operand of |


  10.  #define SET_EP1_IN_PKT_READY()  usbdevregs->EP0_CSR_IN_CSR1_REG= ( (in_csr1 &(~ EPI_WR_BITS)) \

  11.          | EPI_IN_PKT_READY )

  12.  #define SET_EP1_SEND_STALL()    usbdevregs->EP0_CSR_IN_CSR1_REG= ( (in_csr1 & (~EPI_WR_BITS))\

  13.          | EPI_SEND_STALL) )

  14.  #define CLR_EP1_SENT_STALL()    usbdevregs->EP0_CSR_IN_CSR1_REG= ( (in_csr1 & (~EPI_WR_BITS))\

  15.           &(~EPI_SENT_STALL) )

  16.  #define FLUSH_EP1_FIFO()    usbdevregs->EP0_CSR_IN_CSR1_REG= ( (in_csr1 & (~EPI_WR_BITS))\

  17.           |(EPI_FIFO_FLUSH) )

  18. b. 将usblib.c中

  19. L23

  20.     /*

  21.     extern S3C24X0_INTERRUPT * intregs;

  22.     extern S3C24X0_USB_DEVICE * usbdevregs;

  23.     extern S3C24X0_DMAS * dmaregs;

  24.     */

  25.     extern struct s3c24x0_interrupt * intregs;

  26.     extern struct s3c24x0_usb_device *usbdevregs;

  27.     extern struct s3c24x0_dmas * dmaregs;

  28. c. usbinit.c 中 

  29. L22

  30.     /*

  31.     extern S3C24X0_INTERRUPT * intregs;

  32.     S3C24X0_USB_DEVICE * usbdevregs;

  33.     S3C24X0_DMAS * dmaregs;

  34.     S3C24X0_CLOCK_POWER * clk_powerregs;

  35.     S3C24X0_GPIO * gpioregs;

  36.     */

  37.     extern struct s3c24x0_interrupt * intregs;

  38.     struct s3c24x0_usb_device * usbdevregs;

  39.     struct s3c24x0_dmas * dmaregs;

  40.     struct s3c24x0_clock_power * clk_powerregs;

  41.     struct s3c24x0_gpio * gpioregs;

  42. L122:

  43.     //gpioregs = S3C24X0_GetBase_GPIO(); 

  44.     gpioregs = s3c24x0_get_base_gpio();

  45. L222

  46.     /*

  47.     clk_powerregs = S3C24X0_GetBase_CLOCK_POWER();

  48.     usbdevregs = S3C24X0_GetBase_USB_DEVICE();

  49.     dmaregs = S3C24X0_GetBase_DMAS();

  50.     */

  51.     clk_powerregs = s3c24x0_get_base_clock_power();

  52.     usbdevregs = s3c24x0_get_base_usb_device();

  53.     dmaregs = s3c24x0_get_base_dmas();


  54. L297

  55.     //S3C24X0_INTERRUPT * intregs;

  56.     struct s3c24x0_interrupt * intregs;


  57.     //intregs = S3C24X0_GetBase_INTERRUPT();

  58.     intregs = s3c24x0_get_base_interrupt();

  59. d. usbmain.c 中 

  60. L20

  61.     /*

  62.     extern S3C24X0_USB_DEVICE * usbdevregs;

  63.     extern S3C24X0_DMAS * dmaregs;

  64.     */

  65.     extern struct s3c24x0_usb_device * usbdevregs;

  66.     extern struct s3c24x0_dmas * dmaregs;

  67. L444 解决: warning: suggest parentheses around arithmetic in operand of |


  68. 444     gpioregs->MISCCR = (gpioregs->MISCCR&~(7<<4)) | (clock_sel<<4);

  69. 445     gpioregs->GPHCON = (gpioregs->GPHCON&~(3<<18)) | (2<<18);

  70. e. usbout.c中 

  71. L28

  72.     /*

  73.     extern S3C24X0_INTERRUPT * intregs;

  74.     extern S3C24X0_USB_DEVICE * usbdevregs;

  75.     extern S3C24X0_DMAS * dmaregs;

  76.     */

  77.     extern struct s3c24x0_interrupt * intregs;

  78.     extern struct s3c24x0_usb_device * usbdevregs;

  79.     extern struct s3c24x0_dmas * dmaregs;

  80. L188

  81.     //ClearPending_my(BIT_DMA2);

  82.    ClearPending(BIT_DMA2);

  83. f. usbsetup.c中 

  84. L19

  85.     /*

  86.     extern S3C24X0_INTERRUPT * intregs;

  87.     extern S3C24X0_USB_DEVICE * usbdevregs;

  88.     extern S3C24X0_DMAS * dmaregs;

  89.     */

  90.     extern struct s3c24x0_interrupt * intregs;

  91.     extern struct s3c24x0_usb_device * usbdevregs;

  92.     extern struct s3c24x0_dmas * dmaregs;

  93. L46 解决: warning: suggest parentheses around arithmetic in operand of |


  94. #define CLR_EP0_OUT_PKT_RDY()       usbdevregs->EP0_CSR_IN_CSR1_REG=( (ep0_csr & (~EP0_WR_BITS))| \

  95.         EP0_SERVICED_OUT_PKT_RDY )

  96. #define CLR_EP0_OUTPKTRDY_DATAEND()     usbdevregs->EP0_CSR_IN_CSR1_REG=( (ep0_csr & (~EP0_WR_BITS) )| \

  97.         (EP0_SERVICED_OUT_PKT_RDY|EP0_DATA_END) )


  98. #define SET_EP0_IN_PKT_RDY()        usbdevregs->EP0_CSR_IN_CSR1_REG=( (ep0_csr & (~EP0_WR_BITS) ) | \

  99.         (EP0_IN_PKT_READY) )

  100. #define SET_EP0_INPKTRDY_DATAEND()  usbdevregs->EP0_CSR_IN_CSR1_REG=( (ep0_csr & (~EP0_WR_BITS))| \

  101.         (EP0_IN_PKT_READY|EP0_DATA_END) )


  102. #define CLR_EP0_SETUP_END()         usbdevregs->EP0_CSR_IN_CSR1_REG=( (ep0_csr & (~EP0_WR_BITS)) | \

  103.         (EP0_SERVICED_SETUP_END) )


  104. #define CLR_EP0_SENT_STALL()        usbdevregs->EP0_CSR_IN_CSR1_REG=( (ep0_csr & (~EP0_WR_BITS) )& \

  105.         (~EP0_SENT_STALL) )


  106. #define FLUSH_EP0_FIFO()        {while(usbdevregs->OUT_FIFO_CNT1_REG)usbdevregs->fifo[0].EP_FIFO_REG;}

4.arch/arm/include/asm/arch/s3c24x0.h中

  1. a. 添加两个宏定义

  2.     #define BIT_DMA2 (0x1<<19)

  3.     #define BIT_USBD (0x1<<25)


  4. b. 修改s3c24x0_usb_device结构体

  5.     //u8 res10[7]

  6.     u8 res10[3];

  7.     //u8 res12[3]

  8.     u8 res12[7];

  9.     //u8 res13[7]

  10.     u8 res13[3];

  11.     /*

  12.     struct s3c24x0_usb_dev_fifos fifo[5];

  13.     struct s3c24x0_usb_dev_dmas dma[5];

  14.     */

  15.     u32 res17[8];

  16.     struct s3c24x0_usb_dev_fifos fifo[5];

  17.     u32 res18[11];

  18.     struct s3c24x0_usb_dev_dmas ep1;

  19.     struct s3c24x0_usb_dev_dmas ep2;

  20.     u8 res19[16];

  21.     struct s3c24x0_usb_dev_dmas ep3;

  22.     struct s3c24x0_usb_dev_dmas ep4;


  23. c. 修改 struct s3c24x0_gpio

  24. L481 添加:

  25.     /* s3c2440 */

  26.     u32 res9[4];

  27.     u32 GPJCON;

  28.     u32 GPJDAT;

  29.     u32 GPJUP;

5. usbmain.c中void IsrUsbd(void)调用了ClearPending,其实现如下:

  1. arch/arm/cpu/arm920t/interrupt.c

  2. //添加 ClearPending的实现:

  3. void ClearPending(int bit)

  4. {

  5.     intregs->SRCPND = bit;

  6.     intregs->INTPND = bit;

  7. }

  8. 并修改driver/usb/slave/usbmain.c

  9.  //ClearPending_my(BIT_USBD);

  10.  ClearPending(BIT_USBD);

6. usbmain.c的usb_init_slave(void)调用了Isr_Init(),其实现如下

arch/arm/cpu/arm920t/interrupt.c中添加

  1. #include 


  2. struct s3c24x0_interrupt * intregs;

  3. void (*isr_handle_array[50])(void);

  4. extern void IsrUsbd(void);

  5. extern void IsrDma2(void);

  6. void Dummy_isr(void)

  7. {

  8.     printf("Dummy_isr error, interrupt number: %d, INTMSK = 0x%x\n", intregs->INTOFFSET, intregs->INTMSK);

  9.     while(1);

  10. }

  11. //初始化irq的中断向量表

  12. void Isr_Init(void)

  13. {

  14.     int i = 0;

  15.     intregs = s3c24x0_get_base_interrupt();


  16.     for (i = 0; i < sizeof(isr_handle_array) / sizeof(isr_handle_array[0]); i++ )

  17.     {

  18.         isr_handle_array[i] = Dummy_isr;

  19.     }


  20.     intregs->INTMOD=0x0;     // All=IRQ mode

  21.     intregs->INTMSK=BIT_ALLMSK;     // All interrupt is masked.


  22. #ifdef CONFIG_USB_DEVICE

  23.     isr_handle_array[ISR_USBD_OFT] = IsrUsbd;

  24.     isr_handle_array[ISR_DMA2_OFT] = IsrDma2;

  25.     ClearPending(BIT_DMA2);

  26.     ClearPending(BIT_USBD);

  27. #endif

  28. }

  29. b. 同时在 arch/arm/include/asm/arch/s3c24x0.h中添加


  30. #define ISR_DMA2_OFT      19

  31. #define ISR_USBD_OFT      25

  32.  

  33. c. 并在 include/configs/smdk2410.h 中添加

  34.  #define CONFIG_USB_DEVICE 1

  35. d. arch/arm/lib/bootm.c中,注掉udc_disconnect,否则编译不过


  36. #ifdef CONFIG_USB_DEVICE

  37. {

  38. extern void udc_disconnect (void);

  39. //udc_disconnect ();

  40. }

  41. #endif

7. 开启中断

start_armboot --> 调用enable_interrupts ();

在include/configs/smdk2410.h 中添加 

  1. //#undef CONFIG_USE_IRQ            /* we don't need IRQ/FIQ stuff */

  2. #define CONFIG_USE_IRQ    1

这会导致arch/arm/cpu/arm920t/s3c24x0/interrupt.c 因为缺少readl而出错

同时报错说没有arch_interrupt_init的定义

在arch/arm/cpu/arm920t/s3c24x0/interrupt.c 中添加

  1. #include 


  2. int arch_interrupt_init(void)

  3. {

  4.     return (0);

  5. }

8.还要在arch/arm/lib/board.c中添加

  1. /* enable exceptions */

  2. enable_interrupts ();


  3. //调用usb 初始化函数

  4. usb_init_slave();

10. 还编译不过,需要在arch/arm/cpu/arm920t/interrupt.c中添加

  1. static int intCount;


  2. void Timer_InitEx(void)

  3. {

  4.     intCount=0;

  5.     intregs->SUBSRCPND    = (1<<13);

  6.     ClearPending(BIT_WDT_AC97/*BIT_WDT*/);

  7.     intregs->INTMSK&=~(BIT_WDT_AC97 /*BIT_WDT*/);

  8.     intregs->INTSUBMSK &= ~(1<<13);

  9. }


  10. void Timer_StartEx(void)

  11. {

  12.     //S3C24X0_WATCHDOG * const wdtregs = S3C24X0_GetBase_WATCHDOG();

  13.     struct s3c24x0_watchdog * const wdtregs = s3c24x0_get_base_watchdog();

  14.     wdtregs->WTCON=((get_PCLK()/1000000-1)<<8)|(0<<3)|(1<<2);    // 16us

  15.     wdtregs->WTDAT=0xffff;

  16.     wdtregs->WTCNT=0xffff;


  17.     // 1/16/(65+1),interrupt enable,reset disable,watchdog enable

  18.     wdtregs->WTCON=((get_PCLK()/1000000-1)<<8)|(0<<3)|(1<<2)|(0<<0)|(1<<5);

  19. }

  20. unsigned int Timer_StopEx(void)

  21. {

  22.     int count;

  23.     //S3C24X0_WATCHDOG * const wdtregs = S3C24X0_GetBase_WATCHDOG();

  24.     struct s3c24x0_watchdog * const wdtregs = s3c24x0_get_base_watchdog();


  25.     wdtregs->WTCON=((get_PCLK()/1000000-1)<<8);

  26.     intregs->INTMSK|=BIT_WDT_AC97; //BIT_WDT;

  27.     intregs->INTSUBMSK |= (1<<13);


  28.     count=(0xffff-wdtregs->WTCNT)+(intCount*0xffff);

  29.     return ((unsigned int)count*16/1000000);

  30. }

11. 加入usbslave命令

Common/Makefile中

  1. COBJS-$(CONFIG_USB_DEVICE) += usb_storage.o

common/cmd_usbslave.c  cmd_usbslave.c.txt   (改名为: cmd_usbslave.c, 放在common/目录下)

12 打通中断的路

arch/arm/cpu/arm920t/start.S  L399

  1. irq:

  2. /*

  3.     get_irq_stack

  4.     irq_save_user_regs

  5.     bl    do_irq

  6.     irq_restore_user_regs

  7. */


  8.     sub lr, lr, #4                    @ the return address

  9.     /*@在完成保存堆栈的操作后,跳到中断处理函数IRQ_Handle中*/

  10.     ldr sp, IRQ_STACK_START         @ the stack for irq

  11.     stmdb        { r0-r12,lr }    @ save registers


  12.     ldr lr, =int_return             @ set the return addr

  13.     ldr pc, =IRQ_Handle             @ call the isr

  14. int_return:

  15.     ldmia        { r0-r12,pc }^    @ return from interrupt

arch/arm/cpu/arm920t/interrupt.c //irq的中断服务程序

  1. void IRQ_Handle()

  2. {

  3.     unsigned long oft = intregs->INTOFFSET;

  4.     //S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();

  5.     struct s3c24x0_gpio *const gpio = s3c24x0_get_base_gpio();


  6.     //清中断

  7.     if( oft == 4 ) gpio->EINTPEND = 1<<7;        //EINT4-7合用IRQ4,注意EINTPEND[3:0]保留未用,向这些位写入1可能导致未知结果

  8.     intregs->SRCPND = 1<

  9.     intregs->INTPND    = intregs->INTPND;


  10.     /* run the isr */

  11.     isr_handle_array[oft]();

  12. }

在Isr_init()中    

   isr_handle_array[ISR_USBD_OFT] = IsrUsbd;

   isr_handle_array[ISR_DMA2_OFT] = IsrDma2;

所以当有usb中断时,就会调用IsrUsbd()函数.

13. 最关键的一步, 打开irq中断,重启复位时默认进入0xD3模式,并不开启irq中断,

在start_armboot中完成Port_init之后就要打开irq中断.

  1. /* enable IRQ interrupts */

  2. void enable_interrupts (void)

  3. {

  4.     unsigned long temp;

  5.     __asm__ __volatile__("mrs %0, cpsr\n"

  6.              "bic %0, %0, #0x80\n"

  7.              "msr cpsr_c, %0"

  8.              : "=r" (temp)

  9.              :

  10.              : "memory");

  11. }

当调用enable_interrupts函数之后,irq中断这条路就己经通了,当有usb中断发生时就会进入自己写的usb中断服务程序.

二.调试

2.1 当编译好之后,下载到板子上运行,usb设备枚举正常,但在下载时出现问题

  1. SMDK2410 # usbslave 1 0x30000000

  2. USB host is connected. Waiting a download.


  3. Now, Downloading [ADDRESS:30000000h,TOTAL:1942578]

  4. RECEIVED FILE SIZE: 65536Dummy_isr error, interrupt number: 9, INTMSK = 0xfff7fdff

2.2 加入watchdog和timer中断

  1. int g_TimerIntHappen;

  2. static int intCount;

  3. void IsrTimer4(void)

  4. {

  5.    ClearPending(BIT_TIMER4);

  6.    *(volatile int *)&g_TimerIntHappen = 1;

  7. }



  8. void Dummy_isr(void)

  9. {

  10. printf("Dummy_isr error, interrupt number: %d, INTMSK = 0x%x\n", intregs->INTOFFSET, intregs->INTMSK);

  11. while(1);

  12. }

  13. void Isr_Init(void) //加入中断处理函数

  14. {

  15.    isr_handle_array[ISR_TIMER4_OFT] = IsrTimer4;  

  16.    isr_handle_array[ISR_WDT_OFT]  = IsrWatchdog;
    }


推荐阅读

史海拾趣

Helicomm公司的发展小趣事

在电子行业中,Helicomm公司凭借其深厚的技术积累和不断创新的精神,逐渐崭露头角并发展成为业界的佼佼者。以下是关于Helicomm公司发展起来的五个相关故事:

1. ZigBee技术的引领者

自2002年成立以来,Helicomm公司便致力于ZigBee及IEEE 802.15.4标准的研究与产品开发,成为全球ZigBee技术的引领者之一。公司不仅成功完成了IEEE 802.15.4和ZCP的双重资格认证,还推出了多款经过FCC认证的ZigBee模块,广泛应用于市政、安全、监测、物流、定位等领域。Helicomm的ZigBee模块为客户搭建了一条从芯片到应用的快速通道,极大地简化了无线产品的开发流程。(信息来源:百度百科)

2. 技术并购与子公司成立

2005年,Helicomm公司完成了对尉普(WirelessPlug)科技股份有限公司的并购,并成立了赫立讯科技(北京)有限公司,作为其在中国的全资子公司。这一举措不仅增强了Helicomm在全球无线通讯市场的竞争力,还为其在中国市场的拓展奠定了坚实的基础。赫立讯科技继承了尉普在无线传输终端产品方面的技术积累,进一步推动了ZigBee等无线通讯技术在中国的应用与发展。(信息来源:安阳市菲云网络科技有限公司网站)

3. 参与国际标准制定

作为ZigBee联盟的创始会员之一,Helicomm公司积极参与了ZigBee标准的制定与推广工作。通过与国际同行的紧密合作与交流,Helicomm不断提升自身在无线通讯领域的技术实力和影响力。其产品在符合国际标准的同时,也融入了公司的独特创新,满足了不同行业客户的多样化需求。(信息来源:综合多个来源)

4. 工业无线监控系统的创新

近年来,Helicomm公司联合柏元网控、研华科技等合作伙伴,共同推出了针对油田、水利等行业的工业无线监控系统方案。该系统方案充分利用了Helicomm在ZigBee、GSM/GPRS/CDMA等无线通讯技术方面的优势,结合合作伙伴在软件监控、硬件采集控制等方面的专长,为相关行业提供了高效、可靠的无线监控解决方案。这一创新不仅提升了行业的智能化水平,也进一步巩固了Helicomm在无线通讯领域的领先地位。(信息来源:重庆市智畅行物联科技有限公司网站)

5. 国际市场的拓展

Helicomm公司的产品不仅在中国市场取得了显著成绩,还成功打入国际市场,赢得了广泛的认可。公司凭借其先进的技术、稳定的产品性能和优质的本地化服务,在国际市场中建立了一席之地。特别是在水利、交通、环保、气象等领域,Helicomm的无线通讯产品得到了广泛应用,为全球客户提供了可靠的无线通讯解决方案。(信息来源:综合多个来源)

以上五个故事展示了Helicomm公司在电子行业中的发展历程和成就,体现了其在无线通讯领域的深厚技术实力和不断创新的精神。

Electronic-Bauteile Goerlitz GmbH公司的发展小趣事

随着公司规模的扩大,Electronic-Bauteile Goerlitz GmbH公司意识到供应链管理的重要性。公司通过优化供应链管理,实现了原材料采购、生产、物流等各个环节的协同作业。这不仅提高了生产效率,降低了成本,还确保了产品质量的稳定性和交货期的准确性。这些努力使得公司在竞争激烈的市场中保持了良好的竞争力。

珠海艾派克(APEXMIC)公司的发展小趣事

为了进一步提升研发实力,艾派克先后在珠海、上海、杭州和美国北卡罗来纳州建立了四大研发中心,并与浙江大学、中科院上海微系统所等国内外知名机构建立联合实验室。这些举措不仅加强了公司在技术研发方面的国际合作,也推动了艾派克在行业技术前沿的领先地位。

DIOTECH公司的发展小趣事

为了进一步提升市场份额和品牌影响力,DIOTECH公司开始加大市场拓展力度。通过参加国际电子展会、举办新品发布会等活动,公司成功吸引了全球范围内的客户和合作伙伴的关注。同时,公司还加强了品牌建设,通过一系列营销活动提升了品牌知名度和美誉度。这些努力使得DIOTECH逐渐成为了电子行业内的知名品牌。

Dover Corporation公司的发展小趣事

作为一家多元化制造商,Dover Corporation一直致力于创新技术的研发与应用。公司在多个领域拥有先进的技术和解决方案,如先进的电梯控制系统、高效的燃料解决方案等。这些技术的应用不仅提高了Dover产品的性能和质量,也为客户提供了更加优质的服务。

Hoffman_Enclosures__Inc.公司的发展小趣事

Hoffman在追求企业发展的同时,也积极履行社会责任,致力于实现可持续发展。公司注重环保和节能,不断推出绿色、低碳的产品和技术。同时,Hoffman还积极参与公益事业,通过捐款、志愿服务等多种方式回馈社会。这些举措不仅提升了公司的社会形象,也促进了企业与社会的和谐共生。

以上五个故事展示了Hoffman Enclosures, Inc.在电子行业中的发展历程和关键节点,每个故事都体现了公司在技术创新、市场拓展、产品定制、标准制定以及社会责任等方面的努力和成就。

问答坊 | AI 解惑

关于中国风能-风力发电行业前景的探讨

关于中国风能-风力发电行业前景的探讨 最近看了一篇关于风能风力发电的报告目录(中国风能-风力发电行业综合市场研究报告),里边对风力发电只有一个介绍; 报告的链接是:http://www.boomingfield.com/Html/yjxxny/2008-12/12/102720491.html 不知 ...…

查看全部问答>

苹果订购400万部新版iPhone:传部分面向中国

本帖最后由 jameswangsynnex 于 2015-3-3 19:57 编辑 北京时间4月14日上午消息,据台湾媒体报道,消息称苹果已经订购了400万部新版iPhone,部分将面向中国市场,交货时间为本季度结束前。 根据零组件厂得到的消息,苹果已经于本周正式宣布新版iPh ...…

查看全部问答>

【转周立功】怎样成为优秀的电子工程师?

“工程师是科学家;工程师是艺术家;工程师也是思想家。”一位伟大的工程师曾经提出过这样的一段感言。不错,工程师是利用自然科学来创造工程的人。工程既是物质的也是思想上的。许多不朽的工程,伟大的发明以及出神入化的技术方案,许多人往往只看 ...…

查看全部问答>

DDK 例子中BulkUsb的问题?

本来刚涉入驱动开发的行列不久,最近测试了一下DDK中的bulkusb编译生成的驱动,应用程序也是用DDK例子bulkusb中的exe,但是发现一些问题,希望各位高手能出手相助: (1)驱动装上去之后显示不出绿色图标。  这个图标的出现和什么有关 ...…

查看全部问答>

重开一贴,发个没人回答的问题

wince上如何枚举可连接的无线网络资源,NDIS好象可以实现,不过过程看起来很复杂,有没有相关大侠给点经验.…

查看全部问答>

format ' x' invalid or incompatible with argument(protel99导出问题)

Protel99中在schematic 画好以后想导到PCB里去,一点就出来 format \' x\' invalid or incompatible with argument 这个提示,看网上有出现这问题,但一直不成功啊 哪位能详细讲讲 谢谢了…

查看全部问答>

uCOS-III基于VC++6.0的移植实例(支持浮点数)

uCOS-III version: V3.03.00。uCOS-III for VC使用Microsoft Visual C++ 6.0编译,创建工程时选择Win32控制台应用程序,添加相关文件到工程后,点击Project——>Settings——>C/C++选项,Category选择Preprocessor,Additional include directories ...…

查看全部问答>

北京知名通信公司招聘DSP软件工程师

DSP软件工程师  年薪16-19W 岗位职责: 1、负责McWiLL宽带无线接入系统物理层算法的验证及实现,包括基站和终端; 2、负责SCDMA基站和终端产品物理层软件的开发及维护。 任职要求: 1、本科及以上学历,电子、通信等相关专业; 2、 ...…

查看全部问答>

北京有要兼职的没有,求带走

小弟2年工作经验,熟悉stm32  lpc2366 dsp67XX , 可以pcblayout,  擅长单片机程序开发 ,生活不易求拉走…

查看全部问答>