这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » uc,os 关于uc/os的移植

共2条 1/1 1 跳转至

uc,os 关于uc/os的移植

院士
2006-09-17 18:14:16     打赏
uc,os 关于uc/os的移植



关键词: 关于     移植    

院士
2006-12-22 22:43:00     打赏
2楼

http://www.zlgmcu.com网站的专栏上下载了一份uc/os在Keil上的移植程序,作了一些应用的改动,主要是想验证一下使用uc/os的内存管理,在这里我使用任务1分配一块内存,然后发送相应的消息,在任务2中接收相应的消息,释放分配的内存,发现发配的内存指针在传递的过程中被更改,不知到是为什么?能帮助解释一下吗?谢谢!
void Task1(void xdata * ppdata) reentrant
{
     unsigned char err;
  
  stryy xdata*  kk;
  ppdata = ppdata;
  while(1)           
  {
  number++;
  if(number>9) number=0;
  kk=(stryy xdata*)OSMemGet(mem,&err);
  //kk=yyy;
  kk->a=5 ;
  err=OSQPost(CommQ,(void *)kk);
  switch(err)
  {
    case OS_NO_ERR:
    printf("post msg ok!\n");
    break;
    case OS_Q_FULL:
    OSQFlush(CommQ);
    printf("box is over!");
    break;
  }   
// printf("\n1");
  OSTimeDlyHMSM(0,0,10,0);
  }
    
}
void Task2(void xdata * ppdata) reentrant
{
unsigned char err;
    unsigned char xdata *pp;
ppdata = ppdata;
while(1)
{

     pp=(unsigned char xdata*)OSQPend(CommQ,0,&err);
if(err==OS_NO_ERR)
{
     switch(*pp)
     {
   case 1:
     printf("received value is 1\n");
     break;
   case 2:
     printf("received value is 2\n");
     break;
   case 3:
     printf("received value is 3\n");
     break;
    case 4:
     printf("received value is 4\n");
     break;
    case 5:
     printf("received value is 5\n");
     break;
    case 6:
     printf("received value is 6\n");
     break;
    case 7:
     printf("received value is 7\n");
     break;
    case 8:
     printf("received value is 8\n");
     break;
    case 9:
     printf("received value is 9\n");
     break;
    case 0:
     printf("received value is 0\n");
     break;
   default:
     printf("received default");
     break;
      }
     }
else
  {
     printf("err explain");
     }
}
err=OSMemPut(mem,pp);
}    
void SerialInitial()
{
/* set TI to 1, set TR1 to 1 */
SCON = 0x52;/* SM0 SM1 =1 SM2 REN TB8 RB8 TI RI */
TMOD = 0x20;/* GATE=0 C/T-=0 M1 M0=2 GATE C/T- M1 M0 */
TH1 = 0xE6; /* TH1=E6 4800bit/s when at 24MHz,TH1=F3,9600bit/s,24MHz */
PCON = 0x80;
TCON = 0x40;/* 01101001 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT */
}
void InterruptInitial()
{
/* set timer. 50ms, THTL = 3caf when cpu at 12MHz */
TMOD |= 0x01;
TH0 = 0x70;
TL0 = 0x00;
/* TR0 is set in OSStart() */
ET0 = 1;
}
main()
{
    unsigned char errm;
SerialInitial();
InterruptInitial();
    OSInit();
    printf("\nstart");
//pReceiverMailBox=OSMboxCreate((void*)0);
    //pSenderMailBox=OSMboxCreate((void*)0);
mem=OSMemCreate(&Memo,5,32,&errm);
CommQ=OSQCreate((void xdata*)&CommMsg[0],3);
OSQFlush(CommQ);
    OSTaskCreate(Task1, (void xdata *)0, &Task1Stack[0],2);
OSTaskCreate(Task2, (void xdata *)0, &Task2Stack[0],3);
    OSStart();
}
1: 在问是否ucos在8位机上移植有限制?

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]