新手上路
- 积分
- 48
- 金钱
- 48
- 注册时间
- 2015-6-17
- 在线时间
- 5 小时
|
楼主 |
发表于 2015-6-20 20:30:12
|
显示全部楼层
回复【2楼】zuozhongkai:
---------------------------------
按照我的理解我写了个程序,实现将收到的CAN数据发回去,但是回来的数据不对,不知道是哪里的问题,能不能帮我看一下:
代码:
发送任务函数
static void AppTaskCAN(void *p_arg)
{
OS_ERR err;
CPU_SR_ALLOC();
u8 *qout,i;
u8 *data;
OS_MSG_SIZE size;
(void)p_arg;
qout=malloc(100);
data=malloc(100);
while(1)
{
qout=OSQPend(&CAN1Q,0,OS_OPT_PEND_BLOCKING,&size,NULL,&err);
i=*qout;
printf("TaskCan:%x\r\n",i);
memcpy(data,qout,size);
CAN1_Send(data,size);
}
}
中断服务函数:
void CAN1_RX0_IRQHandler(void)
{ int i;
OS_ERR err;
CanRxMsg RxMessage;
OSIntEnter();
CAN_Receive(CAN1,CAN_FIFO0,&RxMessage);
for(i=0;i<RxMessage.DLC;i++)
{
Can1RxData=RxMessage.Data;
}
printf("directly out:%x",Can1RxData[0]);
OSQPost(&CAN1Q,&Can1RxData,RxMessage.DLC,OS_OPT_POST_FIFO,&err);
CAN_ClearITPendingBit(CAN1,CAN_IT_FMP0);
OSIntExit();
}
要传递的数据变量是CAN1RxData,是个u8的指针,在开始任务里我也给他分配空间了,发回来的数据字节数倒是对的,但数据不对,而且没有变化,一直是固定的几个数> |
|