mirror of https://github.com/ArduPilot/ardupilot
AP_UAVCAN: set timeout for periodic msgs to 1
this stops us keeping messages for resend for too long, which fixes a major memory leak
This commit is contained in:
parent
4c51edfaca
commit
5f8bff8f3e
|
@ -74,6 +74,10 @@ const AP_Param::GroupInfo AP_UAVCAN::var_info[] = {
|
||||||
AP_GROUPEND
|
AP_GROUPEND
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// this is the timeout in milliseconds for periodic message types. We
|
||||||
|
// set this to 1 to minimise resend of stale msgs
|
||||||
|
#define CAN_PERIODIC_TX_TIMEOUT_MS 1
|
||||||
|
|
||||||
static void gnss_fix_cb(const uavcan::ReceivedDataStructure<uavcan::equipment::gnss::Fix>& msg, uint8_t mgr)
|
static void gnss_fix_cb(const uavcan::ReceivedDataStructure<uavcan::equipment::gnss::Fix>& msg, uint8_t mgr)
|
||||||
{
|
{
|
||||||
if (hal.can_mgr[mgr] != nullptr) {
|
if (hal.can_mgr[mgr] != nullptr) {
|
||||||
|
@ -501,15 +505,15 @@ bool AP_UAVCAN::try_init(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
act_out_array[_uavcan_i] = new uavcan::Publisher<uavcan::equipment::actuator::ArrayCommand>(*node);
|
act_out_array[_uavcan_i] = new uavcan::Publisher<uavcan::equipment::actuator::ArrayCommand>(*node);
|
||||||
act_out_array[_uavcan_i]->setTxTimeout(uavcan::MonotonicDuration::fromMSec(20));
|
act_out_array[_uavcan_i]->setTxTimeout(uavcan::MonotonicDuration::fromMSec(CAN_PERIODIC_TX_TIMEOUT_MS));
|
||||||
act_out_array[_uavcan_i]->setPriority(uavcan::TransferPriority::OneLowerThanHighest);
|
act_out_array[_uavcan_i]->setPriority(uavcan::TransferPriority::OneLowerThanHighest);
|
||||||
|
|
||||||
esc_raw[_uavcan_i] = new uavcan::Publisher<uavcan::equipment::esc::RawCommand>(*node);
|
esc_raw[_uavcan_i] = new uavcan::Publisher<uavcan::equipment::esc::RawCommand>(*node);
|
||||||
esc_raw[_uavcan_i]->setTxTimeout(uavcan::MonotonicDuration::fromMSec(20));
|
esc_raw[_uavcan_i]->setTxTimeout(uavcan::MonotonicDuration::fromMSec(CAN_PERIODIC_TX_TIMEOUT_MS));
|
||||||
esc_raw[_uavcan_i]->setPriority(uavcan::TransferPriority::OneLowerThanHighest);
|
esc_raw[_uavcan_i]->setPriority(uavcan::TransferPriority::OneLowerThanHighest);
|
||||||
|
|
||||||
rgb_led[_uavcan_i] = new uavcan::Publisher<uavcan::equipment::indication::LightsCommand>(*node);
|
rgb_led[_uavcan_i] = new uavcan::Publisher<uavcan::equipment::indication::LightsCommand>(*node);
|
||||||
rgb_led[_uavcan_i]->setTxTimeout(uavcan::MonotonicDuration::fromMSec(20));
|
rgb_led[_uavcan_i]->setTxTimeout(uavcan::MonotonicDuration::fromMSec(CAN_PERIODIC_TX_TIMEOUT_MS));
|
||||||
rgb_led[_uavcan_i]->setPriority(uavcan::TransferPriority::OneHigherThanLowest);
|
rgb_led[_uavcan_i]->setPriority(uavcan::TransferPriority::OneHigherThanLowest);
|
||||||
|
|
||||||
_led_conf.devices_count = 0;
|
_led_conf.devices_count = 0;
|
||||||
|
@ -622,8 +626,6 @@ void AP_UAVCAN::SRV_send_esc(void)
|
||||||
k = 0;
|
k = 0;
|
||||||
|
|
||||||
for (uint8_t i = 0; i < max_esc_num && k < 20; i++) {
|
for (uint8_t i = 0; i < max_esc_num && k < 20; i++) {
|
||||||
uavcan::equipment::actuator::Command cmd;
|
|
||||||
|
|
||||||
if ((((uint32_t) 1) << i) & _esc_bm) {
|
if ((((uint32_t) 1) << i) & _esc_bm) {
|
||||||
// TODO: ESC negative scaling for reverse thrust and reverse rotation
|
// TODO: ESC negative scaling for reverse thrust and reverse rotation
|
||||||
float scaled = cmd_max * (hal.rcout->scale_esc_to_unity(_SRV_conf[i].pulse) + 1.0) / 2.0;
|
float scaled = cmd_max * (hal.rcout->scale_esc_to_unity(_SRV_conf[i].pulse) + 1.0) / 2.0;
|
||||||
|
|
Loading…
Reference in New Issue