Compare commits
2 Commits
dev_debug
...
657d6914ac
| Author | SHA1 | Date | |
|---|---|---|---|
| 657d6914ac | |||
| cad3d841f4 |
@@ -45,7 +45,6 @@ typedef struct {
|
|||||||
typedef struct {
|
typedef struct {
|
||||||
LED_Config *led;
|
LED_Config *led;
|
||||||
osSemaphoreId_t semaphore;
|
osSemaphoreId_t semaphore;
|
||||||
osTimerId_t timer;
|
|
||||||
} LEDContext;
|
} LEDContext;
|
||||||
/* USER CODE END PTD */
|
/* USER CODE END PTD */
|
||||||
|
|
||||||
|
|||||||
+14
-27
@@ -97,22 +97,13 @@ void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
|
|||||||
*/
|
*/
|
||||||
void vCANLoggerListen(void *argument)
|
void vCANLoggerListen(void *argument)
|
||||||
{
|
{
|
||||||
/* CODE BEGIN */
|
/* CODE BEGIN */
|
||||||
CAN_HandleTypeDef *hcan = (CAN_HandleTypeDef*)argument;
|
LEDContext *context = (LEDContext*)argument;
|
||||||
osMessageQueueId_t queue;
|
|
||||||
CanMessage_t message;
|
|
||||||
|
|
||||||
queue = (hcan->Instance == CAN1) ? xCAN1RxQueue : xCAN2RxQueue;
|
for (;;)
|
||||||
|
{
|
||||||
for (;;)
|
if (osSemaphoreAcquire(context->semaphore, 25U) == osOK) HAL_GPIO_WritePin(context->led->port, context->led->pin, GPIO_PIN_SET);
|
||||||
{
|
else HAL_GPIO_WritePin(context->led->port, context->led->pin, GPIO_PIN_RESET);
|
||||||
if (osMessageQueueGet(queue, &message, NULL, osWaitForever) == osOK)
|
|
||||||
{
|
|
||||||
osSemaphoreRelease( (hcan->Instance == CAN1) ? xSemaphoreCAN1 : xSemaphoreCAN2 );
|
|
||||||
// TODO: use this semaphore
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
/* CODE END */
|
/* CODE END */
|
||||||
}
|
}
|
||||||
/* END vCANLoggerListen */
|
/* END vCANLoggerListen */
|
||||||
@@ -125,19 +116,15 @@ void vCANLoggerListen(void *argument)
|
|||||||
*/
|
*/
|
||||||
void vLEDHeartbeat(void *argument)
|
void vLEDHeartbeat(void *argument)
|
||||||
{
|
{
|
||||||
/* CODE BEGIN */
|
/* CODE BEGIN */
|
||||||
LEDContext *context = (LEDContext*)argument;
|
LEDContext *context = (LEDContext*)argument;
|
||||||
|
|
||||||
if (osSemaphoreAcquire(context->semaphore, 0U) == osOK)
|
for (;;)
|
||||||
{
|
{
|
||||||
HAL_GPIO_WritePin(context->led->port, context->led->pin, GPIO_PIN_SET);
|
if (osSemaphoreAcquire(context->semaphore, 25U) == osOK) HAL_GPIO_WritePin(context->led->port, context->led->pin, GPIO_PIN_SET);
|
||||||
osTimerStart(context->timer, 25U);
|
else HAL_GPIO_WritePin(context->led->port, context->led->pin, GPIO_PIN_RESET);
|
||||||
}
|
}
|
||||||
else
|
/* CODE END */
|
||||||
{
|
|
||||||
HAL_GPIO_WritePin(context->led->port, context->led->pin, GPIO_PIN_RESET);
|
|
||||||
}
|
|
||||||
/* CODE END */
|
|
||||||
}
|
}
|
||||||
/* END vLEDHeartbeat */
|
/* END vLEDHeartbeat */
|
||||||
/* USER CODE END FunctionPrototypes */
|
/* USER CODE END FunctionPrototypes */
|
||||||
|
|||||||
+20
-22
@@ -55,9 +55,6 @@ LEDContext ledContextCAN2;
|
|||||||
osSemaphoreId_t xSemaphoreCAN1;
|
osSemaphoreId_t xSemaphoreCAN1;
|
||||||
osSemaphoreId_t xSemaphoreCAN2;
|
osSemaphoreId_t xSemaphoreCAN2;
|
||||||
|
|
||||||
osTimerId_t xHeartbeatTimerCAN1;
|
|
||||||
osTimerId_t xHeartbeatTimerCAN2;
|
|
||||||
|
|
||||||
osMessageQueueId_t xCAN1RxQueue;
|
osMessageQueueId_t xCAN1RxQueue;
|
||||||
osMessageQueueId_t xCAN2RxQueue;
|
osMessageQueueId_t xCAN2RxQueue;
|
||||||
/* USER CODE END PV */
|
/* USER CODE END PV */
|
||||||
@@ -126,12 +123,27 @@ int main(void)
|
|||||||
.stack_size = 128 * 4,
|
.stack_size = 128 * 4,
|
||||||
.priority = (osPriority_t) osPriorityRealtime1,
|
.priority = (osPriority_t) osPriorityRealtime1,
|
||||||
};
|
};
|
||||||
|
|
||||||
osThreadId_t xCAN2rx;
|
osThreadId_t xCAN2rx;
|
||||||
const osThreadAttr_t CAN2rxAttributes = {
|
const osThreadAttr_t CAN2rxAttributes = {
|
||||||
.name = "CAN2rx",
|
.name = "CAN2rx",
|
||||||
.stack_size = 128 * 4,
|
.stack_size = 128 * 4,
|
||||||
.priority = (osPriority_t) osPriorityRealtime,
|
.priority = (osPriority_t) osPriorityRealtime,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
osThreadId_t xLEDHeartbeatCAN1;
|
||||||
|
const osThreadAttr_t LEDHeartbeatCAN1Attributes = {
|
||||||
|
.name = "LED_HB_CAN1",
|
||||||
|
.stack_size = 128 * 4,
|
||||||
|
.priority = (osPriority_t) osPriorityVeryLow1,
|
||||||
|
};
|
||||||
|
|
||||||
|
osThreadId_t xLEDHeartbeatCAN2;
|
||||||
|
const osThreadAttr_t LEDHeartbeatCAN2Attributes = {
|
||||||
|
.name = "LED_HB_CAN2",
|
||||||
|
.stack_size = 128 * 4,
|
||||||
|
.priority = (osPriority_t) osPriorityVeryLow,
|
||||||
|
};
|
||||||
/* USER END RTOS_TASKS */
|
/* USER END RTOS_TASKS */
|
||||||
|
|
||||||
/* USER CODE BEGIN RTOS_MUTEX */
|
/* USER CODE BEGIN RTOS_MUTEX */
|
||||||
@@ -139,8 +151,8 @@ int main(void)
|
|||||||
/* USER CODE END RTOS_MUTEX */
|
/* USER CODE END RTOS_MUTEX */
|
||||||
|
|
||||||
/* USER CODE BEGIN RTOS_SEMAPHORES */
|
/* USER CODE BEGIN RTOS_SEMAPHORES */
|
||||||
xSemaphoreCAN1 = osSemaphoreNew(10, 0, NULL);
|
xSemaphoreCAN1 = osSemaphoreNew(32, 0, NULL);
|
||||||
xSemaphoreCAN2 = osSemaphoreNew(10, 0, NULL);
|
xSemaphoreCAN2 = osSemaphoreNew(32, 0, NULL);
|
||||||
|
|
||||||
if (xSemaphoreCAN1 == NULL || xSemaphoreCAN2 == NULL) Error_Handler();
|
if (xSemaphoreCAN1 == NULL || xSemaphoreCAN2 == NULL) Error_Handler();
|
||||||
|
|
||||||
@@ -151,21 +163,14 @@ int main(void)
|
|||||||
/* USER CODE END RTOS_SEMAPHORES */
|
/* USER CODE END RTOS_SEMAPHORES */
|
||||||
|
|
||||||
/* USER CODE BEGIN RTOS_TIMERS */
|
/* USER CODE BEGIN RTOS_TIMERS */
|
||||||
xHeartbeatTimerCAN1 = osTimerNew(vLEDHeartbeat, osTimerOnce, &ledContextCAN1, NULL);
|
/* add timers, ... */
|
||||||
xHeartbeatTimerCAN2 = osTimerNew(vLEDHeartbeat, osTimerOnce, &ledContextCAN2, NULL);
|
|
||||||
|
|
||||||
osTimerStart(xHeartbeatTimerCAN1, 25U);
|
|
||||||
osTimerStart(xHeartbeatTimerCAN2, 25U);
|
|
||||||
|
|
||||||
if (xHeartbeatTimerCAN1 == NULL || xHeartbeatTimerCAN2 == NULL) Error_Handler();
|
|
||||||
|
|
||||||
ledContextCAN1.timer = xHeartbeatTimerCAN1;
|
|
||||||
ledContextCAN2.timer = xHeartbeatTimerCAN2;
|
|
||||||
/* USER CODE END RTOS_TIMERS */
|
/* USER CODE END RTOS_TIMERS */
|
||||||
|
|
||||||
/* USER CODE BEGIN RTOS_QUEUES */
|
/* USER CODE BEGIN RTOS_QUEUES */
|
||||||
xCAN1RxQueue = osMessageQueueNew(32, sizeof(CanMessage_t), NULL);
|
xCAN1RxQueue = osMessageQueueNew(32, sizeof(CanMessage_t), NULL);
|
||||||
xCAN2RxQueue = osMessageQueueNew(32, sizeof(CanMessage_t), NULL);
|
xCAN2RxQueue = osMessageQueueNew(32, sizeof(CanMessage_t), NULL);
|
||||||
|
xLEDHeartbeatCAN1 = osThreadNew(vLEDHeartbeat, &ledContextCAN1, &LEDHeartbeatCAN1Attributes);
|
||||||
|
xLEDHeartbeatCAN2 = osThreadNew(vLEDHeartbeat, &ledContextCAN2, &LEDHeartbeatCAN2Attributes);
|
||||||
|
|
||||||
if (xCAN1RxQueue == NULL || xCAN2RxQueue == NULL) Error_Handler();
|
if (xCAN1RxQueue == NULL || xCAN2RxQueue == NULL) Error_Handler();
|
||||||
/* USER CODE END RTOS_QUEUES */
|
/* USER CODE END RTOS_QUEUES */
|
||||||
@@ -180,13 +185,6 @@ int main(void)
|
|||||||
/* USER CODE END RTOS_EVENTS */
|
/* USER CODE END RTOS_EVENTS */
|
||||||
|
|
||||||
/* USER CODE BEGIN 3 */
|
/* USER CODE BEGIN 3 */
|
||||||
ledContextCAN1.led = &led_can1;
|
|
||||||
ledContextCAN1.semaphore = xSemaphoreCAN1;
|
|
||||||
ledContextCAN1.timer = xHeartbeatTimerCAN1;
|
|
||||||
|
|
||||||
ledContextCAN2.led = &led_can2;
|
|
||||||
ledContextCAN2.semaphore = xSemaphoreCAN2;
|
|
||||||
ledContextCAN2.timer = xHeartbeatTimerCAN2;
|
|
||||||
/* USER CODE END 3 */
|
/* USER CODE END 3 */
|
||||||
|
|
||||||
/* Start scheduler */
|
/* Start scheduler */
|
||||||
|
|||||||
Reference in New Issue
Block a user