the function can_cmd_receive_can_packet_array loses packets that is actually it does not manage to receive the incoming CAN packets.
In which way is it possible to alter the function of receiving CAN packets by using ChibiOS so that it manages to follow up receiving of all the CAN packets?
Code: Select all
CANConfig cancfg = {
CAN_MCR_ABOM | CAN_MCR_AWUM | CAN_MCR_TXFP,
CAN_BTR_SJW(0) | CAN_BTR_TS2(4) | CAN_BTR_TS1(5) | CAN_BTR_BRP(5)
};
uint16_t can_cmd_receive_can_packet_array(uint32_t timeout, uint16_t *message_cnt, CANRxFrame (*msg)[])
{
uint16_t msg_cnt=0;
if (chEvtWaitAnyTimeout(CAN_MAILBOX_TO_MASK(1) | CAN_MAILBOX_TO_MASK(2), MS2ST(timeout)) == 0) return ERR_CAN_READ_TIMEOUT;
do {
while (canReceive(&CAND1, CAN_ANY_MAILBOX, (*msg+msg_cnt), TIME_IMMEDIATE) == RDY_OK) msg_cnt++;
}
while (chEvtWaitAnyTimeout(CAN_MAILBOX_TO_MASK(1) | CAN_MAILBOX_TO_MASK(2), MS2ST(5)) != 0);
*message_cnt=msg_cnt;
return ERR_SUCCESS;
}