OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4273|回复: 6

请教 UCOSIII下CAN总线的接收问题

[复制链接]

12

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
365
金钱
365
注册时间
2015-1-2
在线时间
71 小时
发表于 2016-11-29 10:17:01 | 显示全部楼层 |阅读模式
3金钱
小弟目前再弄UCOSIII,在CAN总线接收上面遇到了难题,肯定各位帮帮忙,指点指点迷津!具体现象是,连续下发4个不同的报文,任务处理函数中串口打印出的数据只有第1条和第4条,并且第四条打印了3次,总的报文数是对的,但就是第2、3条报文没有,第4条报文多了两次。下面是主要的两个函数


在CAN接收中断中:
extern OS_TCB        Can1TaskTCB;
extern OS_TCB        Can2TaskTCB;
extern OS_FLAG_GRP        EVENTFLAH_GRP;

void CAN1_RX0_IRQHandler(void)
{
        OS_ERR   err;       
        static uint8_t i=0,j=0;
        static uint8_t *can1buf[8];
       
        OSIntEnter();
        can1buf[j]=mymalloc(SRAMIN,8);

        CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);
        //for(i=0;i<8;i++)
        //{
                can1buf[j] = (uint8_t*)RxMessage.Data;
        //}
       
        /* 发布任务消息到任务 AppTaskUsart */
//                OSTaskQPost ((OS_TCB      *)&Can1TaskTCB,      //目标任务的控制块
//                             (void        *)can1buf[j],             //消息内容的首地址
//                             (OS_MSG_SIZE  )8,                     //消息长度
//                             (OS_OPT       )OS_OPT_POST_FIFO,      //发布到任务消息队列的入口端
//                             (OS_ERR      *)&err);                 //返回错误类型
               
        OSQPost ((OS_Q*                )&CAN1_QUEUE,
                 (void*                )can1buf[j],
                 (OS_MSG_SIZE   )8,
                 (OS_OPT        )OS_OPT_POST_FIFO,
                 (OS_ERR*        )&err);
        j++;
                if(j==8)
                        j=0;
        OSIntExit();            //退出中断
}


在CAN任务处理控制块中
void can1_task(void *p_arg)
{
        OS_ERR err;
        uint8_t *p,i;
        OS_MSG_SIZE        size;
        p_arg = p_arg;
        while(1)
        {
//                p = OSTaskQPend ((OS_TICK        )0,                    //无期限等待
//                                 (OS_OPT         )OS_OPT_PEND_BLOCKING, //没有消息就阻塞任务
//                                 (OS_MSG_SIZE   *)&size,            //返回消息长度
//                                 (CPU_TS        *)0,                    //返回消息被发布的时间戳
//                                 (OS_ERR        *)&err);                //返回错误类型
                p = OSQPend ((OS_Q*                )&CAN1_QUEUE,
                             (OS_TICK                )0,
                             (OS_OPT                 )OS_OPT_PEND_BLOCKING,
                             (OS_MSG_SIZE*        )&size,
                             (CPU_TS*                )0,
                             (OS_ERR*                )&err);
                for(i=0;i<8;i++)
                {
                        printf("%c",*p++);
                }
                myfree(SRAMIN,p);        //释放内存
                GPIO_ResetBits(GPIOC,GPIO_Pin_1);
                OSTimeDlyHMSM ((CPU_INT16U   )0,
                               (CPU_INT16U   )0,
                               (CPU_INT16U   )1,
                               (CPU_INT32U   )0,
                               (OS_OPT       )OS_OPT_TIME_HMSM_NON_STRICT,
                               (OS_ERR*             )&err);
        }
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
365
金钱
365
注册时间
2015-1-2
在线时间
71 小时
 楼主| 发表于 2016-11-29 10:18:09 | 显示全部楼层
补充一下,不管使用任务内消息还是消息列表,现象都一样
回复

使用道具 举报

2

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2014-12-7
在线时间
3 小时
发表于 2016-11-30 15:00:21 | 显示全部楼层
mark一下,也要做CAN
回复

使用道具 举报

12

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
365
金钱
365
注册时间
2015-1-2
在线时间
71 小时
 楼主| 发表于 2016-11-30 15:43:28 | 显示全部楼层

没人来解答啊!我单步你调试看了一下,每次消息队列发送的首地址都是一个地址,不知道为什么
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165287
金钱
165287
注册时间
2010-12-1
在线时间
2107 小时
发表于 2016-12-1 23:01:46 | 显示全部楼层
帮顶+
回复

使用道具 举报

1

主题

18

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
300
金钱
300
注册时间
2015-10-30
在线时间
66 小时
发表于 2017-1-12 13:30:13 | 显示全部楼层
串口加延时。
回复

使用道具 举报

树高花香草绿 该用户已被删除
发表于 2017-3-13 17:36:50 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-2 00:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表