打印
[PIC®/AVR®/dsPIC®产品]

关于使用MCC配置dsPIC33CK CAN通信配,调用相关代码的疑问

[复制链接]
787|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
TsaiRH|  楼主 | 2022-7-21 17:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用MCC配置dsPIC33CK256MP508 CAN通信,目前在调用接收函数过程中遇到问题。如下必须要一直搭配while循环使用,将其屏蔽,CAN则无法接收到数据,有谁成功的使用过MCC生成的代码。while (1)
    {
        Tmr1_Func();
        CAN1_OperationModeSet(CAN_CONFIGURATION_MODE);

        if(CAN_CONFIGURATION_MODE == CAN1_OperationModeGet())
        {
            if(CAN_OP_MODE_REQUEST_SUCCESS == CAN1_OperationModeSet(CAN_NORMAL_2_0_MODE))
            {
                while(1)
                {
                    if(CAN1_ReceivedMessageCountGet() > 0)
                    {
                        if(true == CAN1_Receive(&msg))
                        {
                            printf("receive successful\n");
                            CAN_TX();
                            break;
                        }
                    }
                }
            }
        }
    }

508_CAN_1_1.X.rar

256.03 KB

使用特权

评论回复
沙发
TsaiRH|  楼主 | 2022-7-21 17:48 | 只看该作者
附件项目是只能自发自收的项目

使用特权

评论回复
板凳
ynwa| | 2022-7-21 20:22 | 只看该作者
不加while(1)一直等待接收,你就只要接收一次吗?就算是只接收一次,那你还要确保这一次接收和发送方在收发时间顺序上配合好。

使用特权

评论回复
地板
TsaiRH|  楼主 | 2022-7-22 13:40 | 只看该作者
ynwa 发表于 2022-7-21 20:22
不加while(1)一直等待接收,你就只要接收一次吗?就算是只接收一次,那你还要确保这一次接收和发送方在收发 ...

加while(1)的话,那我main中其他的的功能就没法跑了,所有感觉这样使用有问题,你那有成功调用MCC生成的代码吗。我的功能是我主程序正常跑,但CAN接收到信息时,我再处理,但不能影响我main中其他的程序执行。我在使用PIC8 和 SAM时都能这样使用

使用特权

评论回复
5
ynwa| | 2022-7-22 16:46 | 只看该作者
TsaiRH 发表于 2022-7-22 13:40
加while(1)的话,那我main中其他的的功能就没法跑了,所有感觉这样使用有问题,你那有成功调用MCC生成的 ...

你项目里还有其他任务,当然肯定不能只把CAN接收放在while(1)里执行啊。CAN接收和其他功能之间的执行关系,需要你根据产品的功能要求做好任务执行的流程设计。

就CAN1_Receive本身而言,并不要求必须在while(1)里执行。你说不用while(1)就无法接收到数据,那么你能确认在执行到CAN1_Receive时,确实已经有数据发过来并被接收了吗?

如果你不用在主程序里查询等待的方式来接收CAN,也可以用中断方式来接收。不过,CAN接收和其他功能之间的执行关系,依然还是取决于你对执行流程的调度管理。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

42

帖子

0

粉丝