gpt4 book ai didi

c - 免费 rtos 中 xTaskAbortDelay 函数的用途是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 04:16:18 27 4
gpt4 key购买 nike

我有两个任务,其中我从蓝牙接收数据,如果我收到一个特定的十六进制值,我想要一个任务(即切换 LED 状态)根据接收到的数据运行。

如果没有收到数据,那么两个任务都应该按计划运行。

我一直在尝试使用 xTaskAbortDelay 函数,任务确实从蓝牙数据输入运行,但是,之后 LED 任务连续运行。

xTaskAbortDelay 是否在这里制造了一些问题?我应该使用其他东西来实现相同的功能吗?

TaskHandle_t  lora_send_data_handle;
TaskHandle_t ble_send_data_handle;
TaskHandle_t test_data_handle;

static void button_task_check(void * pvParameter)
{
TickType_t xLastWakeTime;
const TickType_t xFrequency = 1024;
xLastWakeTime = xTaskGetTickCount();
while(1)
{
nrf_delay_ms(100);
SEGGER_RTT_printf(0,"%s","INSIDE SWITCHING\r\n");
xTaskAbortDelay(test_data_handle);

vTaskDelayUntil( &xLastWakeTime, (TickType_t) 1024);
}
}


/*TASK TO RUN LEDS CHECK */
static void led_task_check(void * pvParameter)
{
TickType_t xLastWakeTime;
const TickType_t xFrequency = 122880;
xLastWakeTime = xTaskGetTickCount();

while(1)
{
SEGGER_RTT_printf(0,"%s","TEST TASK\r\n");
nrf_gpio_pin_write(RED,1);
nrf_gpio_pin_write(GREEN,1);
nrf_gpio_pin_write(BLUE,1);

nrf_gpio_pin_write(RED,0);
nrf_gpio_pin_write(GREEN,1);
nrf_gpio_pin_write(BLUE,1);
nrf_delay_ms(1000);
nrf_gpio_pin_write(RED,1);
nrf_gpio_pin_write(GREEN,0);
nrf_gpio_pin_write(BLUE,1);
nrf_delay_ms(1000);
nrf_gpio_pin_write(RED,1);
nrf_gpio_pin_write(GREEN,1);
nrf_gpio_pin_write(BLUE,0);
nrf_delay_ms(1000);

nrf_gpio_pin_write(RED,0);
nrf_gpio_pin_write(GREEN,0);
nrf_gpio_pin_write(BLUE,0);
nrf_delay_ms(1000);

vTaskDelayUntil( &xLastWakeTime, (TickType_t) 122880);
}
}


int main(void)
{

uint8_t rx_qspi[255];
SEGGER_RTT_printf(0,"%s","reset\r\n");

nrf_delay_ms(100);

xQueue1 = xQueueCreate(1, 30);

ret_code_t err_code;
err_code = nrf_drv_clock_init();
SEGGER_RTT_WriteString(0, err_code);

UNUSED_VARIABLE(xTaskCreate( button_task_check, "t", \
configMINIMAL_STACK_SIZE + 200, NULL,3, &lora_send_data_handle));
UNUSED_VARIABLE(xTaskCreate(led_task_check, "et", \
configMINIMAL_STACK_SIZE + 200, NULL, 2, &test_data_handle));

vTaskStartScheduler();

while(1);
}

最佳答案

声誉太低无法发表评论。从你说的来看,一切都按照你说的进行。需要更多信息:

  1. LED 任务是什么样的?
  2. 您使用抢占式还是协作式调度程序(freertosconfig.h 文件中的 #define configUSE_PREEMPTION 1)。
  3. 这三项任务的优先级是什么?

还有一点需要考虑:在完成任务后,您是否将任务恢复为 BLOCKED 状态?你应该先检查一下。您首先如何阻止任务?

也许尝试使用调用 vTaskResume( <LED task handle> )从蓝牙任务和调用 vTaskSuspend()一旦完成它的工作,从 LED 任务。我个人认为这不是最好的方法,但它应该有效。

关于c - 免费 rtos 中 xTaskAbortDelay 函数的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52075094/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com