5998|6

180

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

请教 UCOSIII下CAN总线的接收问题 [复制链接]

 小弟目前再弄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);
        }
}

最新回复

OSTimeDlyHMSM ((CPU_INT16U   )0,                                (CPU_INT16U   )0,                                (CPU_INT16U   )1,                                (CPU_INT32U   )0,                                (OS_OPT       )OS_OPT_TIME_HMSM_NON_STRICT,                                (OS_ERR*             )&err); 为什么接受一帧数据后延时1s?去掉这句试一试。。。  详情 回复 发表于 2017-1-7 21:54
点赞 关注(1)
个人签名是金子总会发光1
 

回复
举报

180

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
补充一下,使用任务内消息和消息列表,现象都一样
 
 
 

回复

4177

帖子

9

TA的资源

五彩晶圆(高级)

板凳
 
UCOSIII还没开始玩,没你玩的那么高端。我建议你还是先看看在裸机下,你的can总线收发通不通? 我用到的是can的分析仪

点评

裸机是没有问题的。常用产品,用了好久了,  详情 回复 发表于 2016-11-30 10:23
 
 
 

回复

180

帖子

0

TA的资源

一粒金砂(中级)

4
 
huaiqiao 发表于 2016-11-29 18:49
UCOSIII还没开始玩,没你玩的那么高端。我建议你还是先看看在裸机下,你的can总线收发通不通? 我用到的是c ...

裸机是没有问题的。常用产品,用了好久了,

点评

没玩过iii,所以帮不到你。但是如果裸机没有问题,估计你的问题还是出在iii的程序这里吧  详情 回复 发表于 2016-11-30 11:40
 
个人签名是金子总会发光1
 
 

回复

4177

帖子

9

TA的资源

五彩晶圆(高级)

5
 
李俊锋 发表于 2016-11-30 10:23
裸机是没有问题的。常用产品,用了好久了,

没玩过iii,所以帮不到你。但是如果裸机没有问题,估计你的问题还是出在iii的程序这里吧
 
 
 

回复

113

帖子

1

TA的资源

一粒金砂(中级)

6
 
是不是CAN数据发送慢一点就是正确的?
 
 
 

回复

951

帖子

1

TA的资源

纯净的硅(中级)

7
 
查看本帖全部讨论,请登录或者注册
 
个人签名人有的时候真是奇怪,选择了会后悔,放弃了会遗憾,完美只能是一种理想,不是一种存在。
 
 

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

猜你喜欢
随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
Vicor 有奖下载 | 在48V架构中使用高密度功率转换器构建更好的机器人
活动时间:即日起-4月28日
活动奖励:螺丝刀套装、充电套装、电风扇

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 4

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表