...trying new tricks
This commit is contained in:
parent
ef0778b7ee
commit
9ee5aea348
13
DShotRMT.cpp
13
DShotRMT.cpp
|
|
@ -131,7 +131,6 @@ uint16_t DShotRMT::getERPM()
|
|||
}
|
||||
|
||||
// Try to receive telemetry data
|
||||
rmt_symbol_word_t _rx_symbols[RX_BUFFER_SIZE];
|
||||
if (!rmt_receive(_rmt_rx_channel, _rx_symbols, DSHOT_SYMBOLS_SIZE, &_receive_config))
|
||||
{
|
||||
Serial.println(DSHOT_MSG_08);
|
||||
|
|
@ -222,14 +221,13 @@ bool DShotRMT::_initDShotEncoder()
|
|||
bool DShotRMT::_sendDShotFrame(const dshot_packet_t &packet)
|
||||
{
|
||||
// Excluding calculation from timing is more timing stable
|
||||
rmt_symbol_word_t tx_symbols[DSHOT_BITS_PER_FRAME];
|
||||
_encodeDShotFrame(packet, tx_symbols);
|
||||
_encodeDShotFrame(packet, _tx_symbols);
|
||||
|
||||
// Checking timer signal
|
||||
if (_timer_signal())
|
||||
{
|
||||
// Triggers RMT Transmit
|
||||
rmt_transmit(_rmt_tx_channel, _dshot_encoder, tx_symbols, DSHOT_SYMBOLS_SIZE, &_transmit_config);
|
||||
rmt_transmit(_rmt_tx_channel, _dshot_encoder, _tx_symbols, DSHOT_SYMBOLS_SIZE, &_transmit_config);
|
||||
|
||||
// Time Stamp
|
||||
return _timer_reset();
|
||||
|
|
@ -276,7 +274,7 @@ dshot_packet_t DShotRMT::_buildDShotPacket(const uint16_t value)
|
|||
}
|
||||
|
||||
// Encodes DShot packet into RMT buffer and places code into IRAM instead of flash
|
||||
bool DShotRMT::_encodeDShotFrame(const dshot_packet_t &packet, rmt_symbol_word_t *symbols)
|
||||
bool IRAM_ATTR DShotRMT::_encodeDShotFrame(const dshot_packet_t &packet, rmt_symbol_word_t *symbols)
|
||||
{
|
||||
// Parse actual packet into buffer
|
||||
_current_packet = _parseDShotPacket(packet);
|
||||
|
|
@ -339,9 +337,10 @@ uint16_t DShotRMT::_decodeDShotFrame(const rmt_symbol_word_t *symbols)
|
|||
}
|
||||
|
||||
// Timer triggered
|
||||
bool DShotRMT::_timer_signal()
|
||||
bool IRAM_ATTR DShotRMT::_timer_signal()
|
||||
{
|
||||
return (micros() - _last_transmission_time >= _frame_timer_us);
|
||||
// trying new tricks
|
||||
return __builtin_expect((micros() - _last_transmission_time >= _frame_timer_us), 1);
|
||||
}
|
||||
|
||||
// Updates timestamp
|
||||
|
|
|
|||
|
|
@ -112,6 +112,8 @@ private:
|
|||
rmt_encoder_handle_t _dshot_encoder;
|
||||
|
||||
// --- RMT Config ---
|
||||
rmt_symbol_word_t _tx_symbols[DSHOT_BITS_PER_FRAME];
|
||||
rmt_symbol_word_t _rx_symbols[RX_BUFFER_SIZE];
|
||||
rmt_tx_channel_config_t _tx_channel_config;
|
||||
rmt_rx_channel_config_t _rx_channel_config;
|
||||
rmt_transmit_config_t _transmit_config;
|
||||
|
|
@ -132,11 +134,11 @@ private:
|
|||
uint16_t _calculateCRC(const dshot_packet_t &packet);
|
||||
dshot_packet_t _buildDShotPacket(const uint16_t value);
|
||||
uint16_t _parseDShotPacket(const dshot_packet_t &packet);
|
||||
bool _encodeDShotFrame(const dshot_packet_t &packet, rmt_symbol_word_t *symbols);
|
||||
bool IRAM_ATTR _encodeDShotFrame(const dshot_packet_t &packet, rmt_symbol_word_t *symbols);
|
||||
uint16_t _decodeDShotFrame(const rmt_symbol_word_t *symbols);
|
||||
|
||||
// --- Simple Timer ---
|
||||
bool _timer_signal();
|
||||
bool IRAM_ATTR _timer_signal();
|
||||
bool _timer_reset();
|
||||
|
||||
// --- Error Handling ---
|
||||
|
|
|
|||
Loading…
Reference in New Issue