一, 1, 果在任务I2CreadWrite()中不加延时程序 1,2,连续读写EEPROM ,这个任务只会在执行一次,以后不会再执行。其他任务Buzer(void *pdata)和TaskUart0Receive能够正常运行, 2, 尝试过去掉pUart0Queue=OSQPend(Uart0Even,0,&err); 改为直接连续在这个任务中读写EEPROM,也不行,必须的加加延时程序 1,2,才能正常进入此任务。 3, 我想不明白?请教各位!
#include "config.h" #include "stdlib.h"
/******************* Stack Define **********************/ #define TaskStkLengh 128//Define the Task0 stack length 定义用户任务0的堆栈长度 #define I2cRdWrtSize 128//Define I2c function stack length OS_STK TaskStk [TaskStkLengh]; //Define the Task0 stack 定义用户任务0的堆栈 OS_STK BuzerStk[TaskStkLengh]; OS_STK I2CReadWriteStk[I2cRdWrtSize]; OS_STK Uart0Stk[TaskStkLengh];
/********** I/O Define *****************/ #define BEEPCON 0x00000080 /* P0.7引脚控制B1,低电平蜂鸣 */
/********** Parameter Ddfine ******************/ //---Uart0 #define SynUart0 0x55// Uart0 communiction start
/**************Fuction Declare****************/ void Task0(void *pdata); //Task0 任务0
/**************************************************************************** //FuctionName:Buzer //Description:蜂鸣器1秒叫一次 //Input: //Output: //Author: //Date:24_Apr_07 ****************************************************************************/ void Buzer(void *pdata) { pdata=pdata; for(;;) { IO0SET = BEEPCON; OSTimeDly(100); //延时1S IO0CLR = BEEPCON; OSTimeDly(50); } }
/**************************************************************************** //FuctionName:I2CReadWrite //Description:I2c 接收UART0的数据,再写如EEPROM,再读出,对比看正确否 //Input: //Output: //Author: //Date: ****************************************************************************/ void I2CReadWrite(void *pdata) { INT8U *pUart0Queue; INT8U err; INT8U ReadBuf[10]; INT8U I2cWordAdr[]={0x10}; //INT8U WriteBuf[]={0x01,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11}; pdata=pdata; while(1) { pUart0Queue=OSQPend(Uart0Even,0,&err); //先读到BUF,后面对比 I2cRead(CAT24WC02, ReadBuf,I2cWordAdr, 1, 10); OSTimeDly(1);//I2c不能连续读写,一定加延时,---------------1 ReadBuf[0]= *pUart0Queue; //写串口接到的数据到EEPROM I2cWrite(CAT24WC02,pUart0Queue, 10); OSTimeDly(1);------------------------------------------------------------2 //再读出,对比,看正确否 I2cRead(CAT24WC02, ReadBuf, ReadBuf, 1, 10); OSTimeDly(2); /* I2cRead(CAT24WC02, ReadBuf, WriteBuf, 1, 10); OSTimeDly(100); I2cWrite(CAT24WC02, WriteBuf, 11); OSTimeDlyHMSM(0,0,2,0);//Dly 2S I2cRead(CAT24WC02, ReadBuf, WriteBuf, 1, 10); OSTimeDly(100); */ } }
/**************************************************************************** //FuctionName:TaskUart0Receive //Description:接收从上位机EasyARM软件的数据,第一字节是同步头0X55,第二字节是 //发送的数据字节数量 //Input: //Output: //Author: //Date:9-May-07 ****************************************************************************/ void TaskUart0Receive(void *pdata) { INT8U *pUart0Buf; INT8U Uart0Buf[10]; INT8U i=0x00; INT8U z=0x00; pdata = pdata;/* 避免编译警告 */
for (;;) { while (UART0Getch() != SynUart0); //第一字节是同步头0X55 z=UART0Getch(); //第二字节是发送的数据字节数量 pUart0Buf = Uart0Buf; for(i=0x00;i<z;i++) { *pUart0Buf++ = UART0Getch();//Save data to Uart0Buf } OSQPostFront(Uart0Even,Uart0Buf);//发送消息Queue OSTimeDly(1); } }
/****************************************************************************** Task0 任务0 ***************************************************************************/ void Task0 (void *pdata) { pdata = pdata; TargetInit (); OSTaskCreate (Buzer,(void *)0, &BuzerStk[TaskStkLengh-1], 3);//Test Timer0 setting, OSTaskCreate(I2CReadWrite,(void*)0,&I2CReadWriteStk[I2cRdWrtSize-1],2);//I2c reading and writing fuction OSTaskCreate(TaskUart0Receive,(void*)0,&Uart0Stk[TaskStkLengh-1],1);//Uart0 receive while (1) { OSTimeDly(10); } }
int main (void) { PINSEL0=0X00000000;//Conection GPIO IO0DIR=BEEPCON;//I/O output pin OSInit (); OSTaskCreate (Task0,(void *)0, &TaskStk[TaskStkLengh - 1], 0); OSStart (); return 0; } /****************************************************************************** End Of File ******************************************************************************/
二, 周立功的EasyArm上位机串口通讯软件不能用作串口2,3。 我主板只有一个串口,买了个扩展串口卡,但EasyArm在选用2,3时,即使不接实验板 它自己也能够自发自收,不需要经过实验板
三, 我买的EasyArm自己带的I2C读写程序,I2CWRITE()函数(在基础教程P448),子地址和数据放在同个BUF里面,使用不方便。 如果24C16要使用这个模块函数,那怎么办呢?
四, 深圳周立功分公司不提供技术支持 我在深圳的销售商那里买的EasyArm2200,问深圳周立功分公司答复不是他们那儿买的,不提供技术支持,深圳周立功分公司周末从不上班,我周末才休息,我怎么能到他们那里买呢?!
|