Skip to content

Commit 3d62ec9

Browse files
committed
common TX/RX task init
1 parent 8a7e767 commit 3d62ec9

13 files changed

Lines changed: 46 additions & 36 deletions

File tree

common/can_library/can_common.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ can_stats_t can_stats;
1616
volatile uint32_t last_can_rx_time_ms;
1717
DEFINE_QUEUE(q_rx_can, CanMsgTypeDef_t, CAN_RX_QUEUE_LENGTH);
1818

19+
extern ThreadWrapper_t CAN_rx_update_wrapper;
20+
extern ThreadWrapper_t CAN_tx_update_wrapper;
21+
1922
// Shared rx update implementation
2023
void CAN_rx_update() {
2124
CanMsgTypeDef_t rx_msg;
@@ -297,6 +300,17 @@ void PHAL_FDCAN_rxCallback(CanMsgTypeDef_t *msg) {
297300
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
298301
}
299302

303+
void PHAL_FDCAN_txCallback(FDCAN_GlobalTypeDef *fdcan) {
304+
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
305+
TaskHandle_t tx_task = getTaskHandle(CAN_tx_update);
306+
307+
if (tx_task != NULL) {
308+
vTaskNotifyGiveFromISR(tx_task, &xHigherPriorityTaskWoken);
309+
}
310+
311+
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
312+
}
313+
300314
bool CAN_library_init() {
301315
// Initialize TX queues (one per peripheral)
302316
#ifdef USE_FDCAN1

common/can_library/can_common.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,4 +100,12 @@ bool CAN_library_init();
100100
void CAN_handle_irq(CAN_TypeDef *bus, uint8_t fifo);
101101
#endif
102102

103+
#define DEFINE_CAN_TASKS() \
104+
DEFINE_TASK(CAN_rx_update, 0, osPriorityHigh, STACK_2048); \
105+
DEFINE_TASK(CAN_tx_update, 2, osPriorityNormal, STACK_2048);
106+
107+
#define START_CAN_TASKS() \
108+
START_TASK(CAN_rx_update); \
109+
START_TASK(CAN_tx_update);
110+
103111
#endif // CAN_COMMON_H

common/phal_G4/fdcan/fdcan.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -353,13 +353,13 @@ static inline void PHAL_FDCAN_RX_IRQHandler(FDCAN_GlobalTypeDef *fdcan) {
353353
static inline void PHAL_FDCAN_TX_IRQHandler(FDCAN_GlobalTypeDef *fdcan) {
354354
if (fdcan->IR & FDCAN_IR_TC) {
355355
fdcan->IR = FDCAN_IR_TC;
356-
PHAL_FDCAN_txCallback();
356+
PHAL_FDCAN_txCallback(fdcan);
357357
}
358358
}
359359

360360
[[gnu::weak]]
361-
void PHAL_FDCAN_txCallback() {
362-
(void)0;
361+
void PHAL_FDCAN_txCallback(FDCAN_GlobalTypeDef *fdcan) {
362+
(void)fdcan;
363363
}
364364

365365
[[gnu::weak]]

common/phal_G4/fdcan/fdcan.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ void PHAL_FDCAN_setFilters(
2424
void PHAL_FDCAN_send(CanMsgTypeDef_t *msg);
2525
bool PHAL_FDCAN_txFifoFree(FDCAN_GlobalTypeDef *fdcan);
2626
extern void PHAL_FDCAN_rxCallback(CanMsgTypeDef_t *msg);
27-
extern void PHAL_FDCAN_txCallback();
27+
extern void PHAL_FDCAN_txCallback(FDCAN_GlobalTypeDef *fdcan);
2828

2929
#define MAX_NUM_XID_FILTER (8)
3030
#define MAX_NUM_SID_FILTER (28)

source/a_box/main.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,7 @@ void report_telemetry(void);
110110

111111
// Thread Defines
112112
DEFINE_TASK(bms_task, 200, osPriorityHigh, STACK_2048);
113-
DEFINE_TASK(CAN_rx_update, 0, osPriorityHigh, STACK_2048);
114-
DEFINE_TASK(CAN_tx_update, 2, osPriorityNormal, STACK_2048);
113+
DEFINE_CAN_TASKS();
115114
DEFINE_TASK(check_faults, 10, osPriorityNormal, STACK_512);
116115
DEFINE_TASK(fault_library_periodic, A_BOX_FAULT_SYNC_PERIOD_MS, osPriorityNormal, STACK_1024);
117116
DEFINE_TASK(report_telemetry, PACK_STATS_PERIOD_MS, osPriorityLow, STACK_512);
@@ -152,8 +151,7 @@ int main(void) {
152151
osKernelInitialize();
153152

154153
START_TASK(bms_task);
155-
START_TASK(CAN_rx_update);
156-
START_TASK(CAN_tx_update);
154+
START_CAN_TASKS();
157155
START_TASK(check_faults);
158156
START_TASK(fault_library_periodic);
159157
START_TASK(report_telemetry);

source/dashboard/main.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -146,8 +146,7 @@ ALLOCATE_STRBUF(lcd_tx_buf, 2048);
146146

147147
// Thread Defines
148148
DEFINE_TASK(pedalsPeriodic, PEDALS_PERIOD_MS, osPriorityHigh, STACK_1024);
149-
DEFINE_TASK(CAN_rx_update, 0, osPriorityHigh, STACK_2048);
150-
DEFINE_TASK(CAN_tx_update, 2, osPriorityNormal, STACK_2048); // leave stack at 2048
149+
DEFINE_CAN_TASKS();
151150
DEFINE_TASK(fault_library_periodic, DASHBOARD_FAULT_SYNC_PERIOD_MS, osPriorityNormal, STACK_1024);
152151
DEFINE_TASK(updateTelemetryPages, 100, osPriorityNormal, STACK_1024);
153152
DEFINE_TASK(service_start_button, START_BUTTON_PERIOD_MS, osPriorityLow, STACK_512);
@@ -189,8 +188,7 @@ int main(void) {
189188
osKernelInitialize();
190189

191190
START_TASK(pedalsPeriodic);
192-
START_TASK(CAN_rx_update);
193-
START_TASK(CAN_tx_update);
191+
START_CAN_TASKS();
194192
START_TASK(fault_library_periodic);
195193
START_TASK(updateTelemetryPages);
196194
START_TASK(service_start_button);

source/driveline/main.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ extern uint32_t PLLClockRateHz;
7474
extern void HardFault_Handler();
7575
void shockpot_thread();
7676

77+
DEFINE_CAN_TASKS();
7778
DEFINE_TASK(shockpot_thread, 100, osPriorityNormal, 512);
7879
DEFINE_HEARTBEAT_TASK(nullptr);
7980

@@ -99,9 +100,12 @@ int main(void) {
99100

100101
NVIC_EnableIRQ(FDCAN2_IT0_IRQn);
101102

103+
CAN_library_init();
104+
102105
// Software Initalization
103106
osKernelInitialize();
104107

108+
START_CAN_TASKS();
105109
START_TASK(shockpot_thread);
106110
START_HEARTBEAT_TASK();
107111

source/f4_testing/canpiler.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,7 @@ void send_periodic() {
3737
CAN_SEND_pdu_version(GIT_HASH);
3838
}
3939

40-
DEFINE_TASK(CAN_rx_update, 0, osPriorityHigh, STACK_2048);
41-
DEFINE_TASK(CAN_tx_update, 2, osPriorityNormal, STACK_2048);
40+
DEFINE_CAN_TASKS();
4241
DEFINE_TASK(send_periodic, 10, osPriorityNormal, 1024);
4342

4443
int main() {
@@ -62,8 +61,7 @@ int main() {
6261

6362
osKernelInitialize();
6463

65-
START_TASK(CAN_rx_update);
66-
START_TASK(CAN_tx_update);
64+
START_CAN_TASKS();
6765
START_TASK(send_periodic);
6866

6967
osKernelStart();

source/g4_testing/canpiler.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,7 @@ void send_periodic() {
4747
CAN_SEND_abox_version(GIT_HASH);
4848
}
4949

50-
DEFINE_TASK(CAN_rx_update, 0, osPriorityHigh, STACK_2048);
51-
DEFINE_TASK(CAN_tx_update, 2, osPriorityNormal, STACK_2048);
50+
DEFINE_CAN_TASKS();
5251
DEFINE_TASK(send_periodic, 10, osPriorityNormal, 1024);
5352

5453
int main() {
@@ -72,8 +71,7 @@ int main() {
7271

7372
osKernelInitialize();
7473

75-
START_TASK(CAN_rx_update);
76-
START_TASK(CAN_tx_update);
74+
START_CAN_TASKS();
7775
START_TASK(send_periodic);
7876

7977
osKernelStart();

source/g4_testing/izze_imu_config.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,7 @@ void config_imu() {
6363
);
6464
}
6565

66-
DEFINE_TASK(CAN_rx_update, 0, osPriorityHigh, STACK_2048);
67-
DEFINE_TASK(CAN_tx_update, 2, osPriorityNormal, STACK_2048);
66+
DEFINE_CAN_TASKS();
6867
DEFINE_TASK(config_imu, IZZE_IMU_CONFIG_PERIOD_MS, osPriorityNormal, 1024);
6968

7069
int main() {
@@ -91,8 +90,7 @@ int main() {
9190

9291
osKernelInitialize();
9392

94-
START_TASK(CAN_rx_update);
95-
START_TASK(CAN_tx_update);
93+
START_CAN_TASKS();
9694
START_TASK(config_imu);
9795

9896
osKernelStart();

0 commit comments

Comments
 (0)