mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-11-15 01:51:39 +08:00
px4iofirmware: add PX4IO_PERF define to completely disable perf counters
This commit is contained in:
@@ -51,11 +51,13 @@
|
||||
#include <up_internal.h>
|
||||
#include <up_arch.h>
|
||||
#include <stm32.h>
|
||||
#include <perf/perf_counter.h>
|
||||
|
||||
//#define DEBUG
|
||||
#include "px4io.h"
|
||||
|
||||
#if defined(PX4IO_PERF)
|
||||
# include <perf/perf_counter.h>
|
||||
|
||||
static perf_counter_t pc_txns;
|
||||
static perf_counter_t pc_errors;
|
||||
static perf_counter_t pc_ore;
|
||||
@@ -65,6 +67,7 @@ static perf_counter_t pc_idle;
|
||||
static perf_counter_t pc_badidle;
|
||||
static perf_counter_t pc_regerr;
|
||||
static perf_counter_t pc_crcerr;
|
||||
#endif
|
||||
|
||||
static void rx_handle_packet(void);
|
||||
static void rx_dma_callback(DMA_HANDLE handle, uint8_t status, void *arg);
|
||||
@@ -89,6 +92,7 @@ static struct IOPacket dma_packet;
|
||||
void
|
||||
interface_init(void)
|
||||
{
|
||||
#if defined(PX4IO_PERF)
|
||||
pc_txns = perf_alloc(PC_ELAPSED, "txns");
|
||||
pc_errors = perf_alloc(PC_COUNT, "errors");
|
||||
pc_ore = perf_alloc(PC_COUNT, "overrun");
|
||||
@@ -98,6 +102,7 @@ interface_init(void)
|
||||
pc_badidle = perf_alloc(PC_COUNT, "badidle");
|
||||
pc_regerr = perf_alloc(PC_COUNT, "regerr");
|
||||
pc_crcerr = perf_alloc(PC_COUNT, "crcerr");
|
||||
#endif
|
||||
|
||||
/* allocate DMA */
|
||||
tx_dma = stm32_dmachannel(PX4FMU_SERIAL_TX_DMA);
|
||||
@@ -160,7 +165,9 @@ rx_handle_packet(void)
|
||||
dma_packet.crc = 0;
|
||||
|
||||
if (crc != crc_packet(&dma_packet)) {
|
||||
#if defined(PX4IO_PERF)
|
||||
perf_count(pc_crcerr);
|
||||
#endif
|
||||
|
||||
/* send a CRC error reply */
|
||||
dma_packet.count_code = PKT_CODE_CORRUPT;
|
||||
@@ -174,7 +181,10 @@ rx_handle_packet(void)
|
||||
|
||||
/* it's a blind write - pass it on */
|
||||
if (registers_set(dma_packet.page, dma_packet.offset, &dma_packet.regs[0], PKT_COUNT(dma_packet))) {
|
||||
#if defined(PX4IO_PERF)
|
||||
perf_count(pc_regerr);
|
||||
#endif
|
||||
|
||||
dma_packet.count_code = PKT_CODE_ERROR;
|
||||
|
||||
} else {
|
||||
@@ -191,7 +201,10 @@ rx_handle_packet(void)
|
||||
uint16_t *registers;
|
||||
|
||||
if (registers_get(dma_packet.page, dma_packet.offset, ®isters, &count) < 0) {
|
||||
#if defined(PX4IO_PERF)
|
||||
perf_count(pc_regerr);
|
||||
#endif
|
||||
|
||||
dma_packet.count_code = PKT_CODE_ERROR;
|
||||
|
||||
} else {
|
||||
@@ -225,7 +238,9 @@ rx_dma_callback(DMA_HANDLE handle, uint8_t status, void *arg)
|
||||
* We are here because DMA completed, or UART reception stopped and
|
||||
* we think we have a packet in the buffer.
|
||||
*/
|
||||
#if defined(PX4IO_PERF)
|
||||
perf_begin(pc_txns);
|
||||
#endif
|
||||
|
||||
/* disable UART DMA */
|
||||
rCR3 &= ~(USART_CR3_DMAT | USART_CR3_DMAR);
|
||||
@@ -251,7 +266,9 @@ rx_dma_callback(DMA_HANDLE handle, uint8_t status, void *arg)
|
||||
stm32_dmastart(tx_dma, NULL, NULL, false);
|
||||
rCR3 |= USART_CR3_DMAT;
|
||||
|
||||
#if defined(PX4IO_PERF)
|
||||
perf_end(pc_txns);
|
||||
#endif
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -266,6 +283,7 @@ serial_interrupt(int irq, void *context, FAR void *arg)
|
||||
USART_SR_NE | /* noise error - we have lost a byte due to noise */
|
||||
USART_SR_FE)) { /* framing error - start/stop bit lost or line break */
|
||||
|
||||
#if defined(PX4IO_PERF)
|
||||
perf_count(pc_errors);
|
||||
|
||||
if (sr & USART_SR_ORE) {
|
||||
@@ -280,6 +298,8 @@ serial_interrupt(int irq, void *context, FAR void *arg)
|
||||
perf_count(pc_fe);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* send a line break - this will abort transmission/reception on the other end */
|
||||
rCR1 |= USART_CR1_SBK;
|
||||
|
||||
@@ -311,7 +331,9 @@ serial_interrupt(int irq, void *context, FAR void *arg)
|
||||
if ((length < 1) || (length < PKT_SIZE(dma_packet))) {
|
||||
|
||||
/* it was too short - possibly truncated */
|
||||
#if defined(PX4IO_PERF)
|
||||
perf_count(pc_badidle);
|
||||
#endif
|
||||
dma_reset();
|
||||
return 0;
|
||||
}
|
||||
@@ -320,7 +342,9 @@ serial_interrupt(int irq, void *context, FAR void *arg)
|
||||
* Looks like we received a packet. Stop the DMA and go process the
|
||||
* packet.
|
||||
*/
|
||||
#if defined(PX4IO_PERF)
|
||||
perf_count(pc_idle);
|
||||
#endif
|
||||
stm32_dmastop(rx_dma);
|
||||
rx_dma_callback(rx_dma, DMA_STATUS_TCIF, NULL);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user