saimingking

    1. STM32会淘汰掉单片机吗? 160/38277 stm32/stm8 2010-11-30
                                       就目前来说,当然8 bit MCU,还有市场, 但是随着CM3,CM0的不断推广,8 bit MCU市场份额会越来越小.
    2. 一般的芯片都会有个timer作为中断源的啊,你片子有吗? 直接用timer定时中断就行了啊。 如果你用pwm 还要设置io口是电平还是脉冲中断,是下降沿还是上升沿中断。 timer会有对应的irq,然后通过系统映射成sysintr, 然后initializeinterrupt(sysintr,isEvent。。) 然后在一个线程里面等待isEvent, 然后read_adc 然后interruptdone。
    3. malloc是需要自己写的. 在ce/linux等操纵系统中是调用操作系统的API实现的. 自己动手写一个malloc不难. 一般采用连表方式或文件系统方式做.
    4. 引用 3 楼 peasant_lee 的回复: 你是用什么下载2051的代码到mcu的?
      明天找个能用的程序试试看硬件有没有问题 郁闷了一下午
    5. 急问:键盘驱动打不开 11/4787 嵌入式系统 2010-05-24
      /******************************************************************************************* 函数名称: EINTKey_IntrThread 描    述: 外部中断按键服务线程 输入参数: PVOID pArg:          线程输入参数 输出参数: 无 返    回: 1 或 0 *******************************************************************************************/ DWORD EINTKey_IntrThread(PVOID pArg) {         DWORD ret;     DWORD pressRowNo;         DWORD pressColNo;         // 创建外部中断中断事件         gWaitEvent = CreateEvent(NULL, FALSE, FALSE, NULL);                        // 初始化外部按键中断: 注册中断事件, 允许外部中断         if (!(InterruptInitialize(SYSINTR_Key, gWaitEvent, 0, 0)))         {                 RETAILMSG(1, (TEXT("ERROR: EINTKey: InterruptInitialize failed.\r\n")));                 CloseHandle(gWaitEvent);                 return 0;         }         // 外部按键中断线程开始运行         while (1)         {                 ret = WaitForSingleObject(gWaitEvent, INFINITE);                                 if ((ret == WAIT_OBJECT_0 ) && (g_bKillIST == FALSE))                 {                         if(Key_IsPushed())                         {                                 Sleep(20);                                 if(Key_IsPushed())                                 {                                         EINT_ConfigPinDefault( );                                         KEY_Scan();                                         SetEvent(gReadKeyEvent[0]);                                                RETAILMSG(1,(TEXT(":::The Key PUshed.\r\n")));                                 }                         }                 }                 else                 {                                CloseHandle(gWaitEvent);                         RETAILMSG(1, (TEXT("::: EINTKey_IntrThread Exit. \r\n")));                         return 0;                        } //if (ret != WAIT_OBJECT_0) or Error occurs                 InterruptDone(SYSINTR_Key);           /* 通知内核: 中断处理结束 */         }                           return 1; } /******************************************************************************************* 函数名称: KEY_Init 描    述: 驱动程序初始化函数 输入参数: DWORD dwContext: 设备管理器传递给本驱动的参数, 通常为流接口驱动在注册表内的位置         输出参数: 无 返    回: 驱动程序句柄 *******************************************************************************************/ PUBLIC DWORD KEY_Init(DWORD dwContext) {         DWORD IDThread;         // 取得 GPIO 相关寄存器的虚拟地址空间         if (EINT_InitializeAddresses() == FALSE)            return 0;                                EINT_ConfigInterruptPin();     // 从 OAL 请求一个 SYSINTR 值 /*#if 0     if (!KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &g_EINTIrq, sizeof(UINT32), &g_EINTSysIntr, sizeof(UINT32), NULL))     {         RETAILMSG(1, (TEXT("ERROR: EINTKey: Failed to request sysintr value for EINT interrupt.\r\n")));         return(0);     }     RETAILMSG(1,(TEXT("INFO: EINTKey: Mapped Irq 0x%x to SysIntr 0x%x.\r\n"), g_EINTIrq, g_EINTSysIntr)); #endif*/     // 创建一个外部中断处理线程 IST         gEINTIntrThread = CreateThread(0, 0, (LPTHREAD_START_ROUTINE) EINTKey_IntrThread, 0, 0, &IDThread);         if (gEINTIntrThread == NULL)         {                 RETAILMSG(1, (TEXT("::: KEY_Init: CreateThread() Fail.\r\n")));         //        KernelIoControl(IOCTL_HAL_RELEASE_SYSINTR, &g_EINTSysIntr, sizeof(UINT32), NULL, 0, NULL);                 return 0;         }         gReadKeyEvent[0] = CreateEvent(NULL, FALSE, FALSE, NULL);         gReadKeyEvent[1] = CreateEvent(NULL, FALSE, FALSE, NULL);                RETAILMSG(1, (TEXT("::: KEY_Init Sucessfully! \r\n")));         // 返回不为0的数         return (DWORD)gEINTIntrThread; } /******************************************************************************************* 函数名称: DllEntry 描    述: 驱动程序动态库入口 输入参数:         输出参数: 返    回: *******************************************************************************************/ PUBLIC BOOL WINAPI DllEntry(HANDLE hInstDll, DWORD dwReason, LPVOID lpvReserved) {     switch ( dwReason )         {         case DLL_PROCESS_ATTACH:             RETAILMSG(1, (TEXT("Key: DLL_PROCESS_ATTACH. \r\n")));                     DisableThreadLibraryCalls((HMODULE) hInstDll);             break;         case DLL_PROCESS_DETACH:             RETAILMSG(1, (TEXT("Key: DLL_PROCESS_DETACH. \r\n")));             break;        }     return (TRUE); } /******************************************************************************************* 函数名称: KEY_Close 描    述: 驱动程序关闭函数 输入参数: DWORD Handle:驱动程序句柄 输出参数: 无 返    回: FALSE: 失败    TRUE: 成功 *******************************************************************************************/ BOOL KEY_Close(DWORD Handle) {         if (gOpenCount > 0)                 SetEvent(gReadKeyEvent[1]);                                                /* 通知调用读函数的线程, 驱动已经关闭 */    RETAILMSG(1, (TEXT("Key: close... \r\n")));         gOpenCount = 0;         return TRUE; }   // KEY_Close /******************************************************************************************* 函数名称: KEY_Deinit 描    述: 驱动程序卸载函数 输入参数: DWORD dwContext: 驱动程序句柄 输出参数: 无 返    回: FALSE: 失败    TRUE: 成功 *******************************************************************************************/ BOOL KEY_Deinit(DWORD dwContext) {         SetEvent(gWaitEvent);                                                                /* 通知中断服务线程退出 */     g_bKillIST = TRUE;                                                                    Sleep(200);                                                                                        /* 等待中断服务线程退出 */             SetEvent(gReadKeyEvent[1]);                                                        /* 通知调用读函数的线程, 驱动已经关闭 */         // 释放中断资源         InterruptDone(SYSINTR_Key);         InterruptDisable(SYSINTR_Key); //        KernelIoControl(IOCTL_HAL_RELEASE_SYSINTR, &g_EINTSysIntr, sizeof(UINT32), NULL, 0, NULL);                 // 恢复外部中断引脚为输入 GPIO         EINT_ConfigPinDefault();                           // 释放申请的虚拟空间               if (v_pIOPregs)                 VirtualFree((PVOID) v_pIOPregs, 0, MEM_RELEASE);        gOpenCount = 0;           CloseHandle(gReadKeyEvent[0]);                                                /* 关闭相关事件 */         CloseHandle(gReadKeyEvent[1]);         return TRUE; }   // KEY_Deinit /******************************************************************************************* 函数名称: KEY_Open 描    述: 打开驱动程序 输入参数: DWORD dwData     : 驱动程序引用事例句柄           DWORD dwAccess   : 访问请求代码,是读和写的组合           DWORD dwShareMode: 共享模式   输出参数: 返    回: 驱动程序引用事例句柄 *******************************************************************************************/ DWORD KEY_Open(DWORD dwData, DWORD dwAccess, DWORD dwShareMode) {         RETAILMSG(1, (TEXT("Key: OPEN... \r\n")));     if (gOpenCount > 0)         return 0;                // 本驱动只允许单一访问     gOpenCount = 1;       return gOpenCount; }   // KEY_Open /******************************************************************************************* 函数名称: KEY_IOControl 描    述: 驱动程序 I/O 请求 输入参数: 输出参数: 返    回: 本驱动不支持该请求,返回 FALSE *******************************************************************************************/ BOOL KEY_IOControl(     DWORD Handle,     DWORD dwIoControlCode,     PBYTE pInBuf,     DWORD nInBufSize,     PBYTE pOutBuf,     DWORD nOutBufSize,     PDWORD pBytesReturned     ) {     return FALSE; }   // KEY_IOControl /******************************************************************************************* 函数名称: KEY_Read 描    述: 读取按键状态 输入参数: DWORD Handle    : 驱动程序引用事例句柄           LPVOID pBuffer  : 接收缓冲区           DWORD dwNumBytes: 要读的字节数 输出参数: 无 返    回: 实际读到字节数 *******************************************************************************************/ DWORD KEY_Read(DWORD Handle, LPVOID pBuffer, DWORD dwNumBytes) {         DWORD ret;         DWORD waitMillSec;         DWORD *pReadBuffer;         if ((pBuffer == NULL) || (dwNumBytes
    6. 单片机的精确延时问题,请各位作答! 32/9840 嵌入式系统 2010-05-16
      用定时器工作在方式2(不用重装初值)即M1M0=10,定时的时间由你自己设定 采用汇编的循环也可能会有中断的影响
    7. 自己用个BUFFER,把你要发送的数据格式组包放进BUFFER里,再把BUFFER用MSCOMM发送出去
    8. Protel99SE使用请教。 6/4382 stm32/stm8 2010-05-04
                                       我也遇到了这个情况。。。
    9. USB Driver的结构 133/39634 嵌入式系统 2010-04-22
      不错,挺好
    10. 编译EVC出错 6/2925 嵌入式系统 2010-04-22
      怎么建立的工程? 能否在描述详细点呢。
    11. 程序崩溃问题 33/11394 嵌入式系统 2010-04-20
      说说怎么解决的哈
    12. 求助:电路直流5V电源 测到纳秒级瞬变 5/4250 嵌入式系统 2010-04-06
      谁有制作电源的毕业设计给我发过来,好嘛?
    13. RAM是不需要驱动支持的,直接就可以读写。只有NANDFLASH那些才需要驱动
    14. 建文件 10/3371 嵌入式系统 2010-03-14
      C文件所在文件夹下建子文
    15. 引用 2 楼 philip1106 的回复: 还有 指纹传感器厂家是不是都给提供指纹识别的库使用? 那自己做指纹识别代码有没有意思..
      基本所有的指纹传感器模块都是把对应的识别算法都做好的。 不要需要客户自己开发过多的算法(这里的算法难度有一定大,不是一般公司能做到符合业内标准的)。 对外一般提供类似一些类似的配置和处理指令,这样方便客户进行相关配置,以及添加指纹库。 另外现在一般都很少自己开发 指纹识别代码。 因为这方面的市场已经被国外以及国内一些有实力的厂家开发多年。 他们现在的产品 对应的水平已经很高啦,性能非常不错、 如果只是做研究,那当然可以用TI的DSP做做算法啊
    16. u-boot-1.1.6 DM9000ep网卡ping不通 16/7504 嵌入式系统 2010-03-01
      可能是底层芯片对应答的解析不正确,这个发出的也不是PING而只是ARP请求,我搞网卡驱动时也遇到过这个问题
    17. 我的STM32到底跑多快? 10/6251 stm32/stm8 2010-02-07
                                       速度够用就行了,一般对速度的要求没那么高,再说ST的速度已经很快了
    18. 为对象命名的方法,主要是用于进程间共享内核对象。 如果用命名的对象与ISR绑定不成功 可以用普通的事件与ISR绑定 在IST中再Setevent()发出命名的事件
    19. 做好了,两样都很有前途, 不过做IC,如果能去好公司,待遇更高。
    20. 嵌入式系统的双CPU通讯协议设计 8/4221 嵌入式系统 2009-12-24
      引用 3 楼 tianyangwww 的回复: 啥也没说啊,就给个题目,我还没到公司去呢,想先准备准备
      那就先不要着急了。 你是软件工程专业,可能写程序会写了。可以先看看一些网络基础。 - 千里孤行

最近访客

< 1/1 >

统计信息

已有76人来访过

  • 芯积分:--
  • 好友:--
  • 主题:9
  • 回复:60

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言