在Charge_Bat_Task_init函数中动态创建线程方法创建
Charge_Bat_Task_ptr = rt_thread_create( "Charge_Bat_Task",
Charge_Bat_Task_Entry,
RT_NULL,
512,
5,
10);
返回值为0,即RT_NULL。线程创建失败。
找不到原因,请各位指点。完整工程见附件
RT_thread_Nano_GD32F350G8.zip
//main.c
int main(void)
{
interrupt_config();
// gd_eval_led_init(LED1);
// ledTaskInit();
// flex_button_main();
Gpio_Charge_Bat_init();
Charge_Bat_Task_init();
while(1)
{
gd_eval_led_toggle(LED1);
rt_thread_mdelay(1000);
}
}
//Charge_BatManagemengt.c
#include "Charge_BatManagemengt.h"
#include <rtthread.h>
#include "gd32f350r_eval.h"
uint8_t DownloadFlag = 0;
void Gpio_Charge_Bat_init(void)
{
gpio_mode_set(DebugRight_CHGR_GPIO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, DebugRight_CHGR_PIN);
gpio_mode_set(DebugLeft_FULL_GPIO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, DebugLeft_FULL_PIN);
DownloadFlag = 0;
}
void Gpio_Set_Download_init(void)
{
gpio_mode_set(DebugRight_CHGR_GPIO, GPIO_MODE_AF, GPIO_PUPD_NONE, DebugRight_CHGR_PIN);
gpio_mode_set(DebugLeft_FULL_GPIO, GPIO_MODE_AF, GPIO_PUPD_NONE, DebugLeft_FULL_PIN);
gpio_af_set(DebugRight_CHGR_GPIO, GPIO_AF_0, DebugRight_CHGR_PIN);
gpio_af_set(DebugLeft_FULL_GPIO, GPIO_AF_0, DebugLeft_FULL_PIN);
DownloadFlag = 1;
}
void Charge_Bat_Task_Entry(void *p)
{
rt_err_t result;
rt_uint8_t IsChargeFlag;
while(1)
{
rt_thread_mdelay(1);
rt_kprintf("Charging:%d\n",Charging);
if(Charging)
{
IsChargeFlag = 1;
result = rt_mq_send(&mq_Charge, &IsChargeFlag, 1);
if (result != RT_EOK)
{
rt_kprintf("rt_mq_send ERR_1\n");
}
}
else
{
IsChargeFlag = 0;
result = rt_mq_send(&mq_Charge, &IsChargeFlag, 1);
if (result != RT_EOK)
{
rt_kprintf("rt_mq_send ERR_2\n");
}
}
}
}
void Charge_Bat_Task_init(void)
{
rt_thread_t Charge_Bat_Task_ptr;
rt_err_t result;
//创建线程
Charge_Bat_Task_ptr = rt_thread_create( "Charge_Bat_Task",
Charge_Bat_Task_Entry,
RT_NULL,
512,
5,
10);
rt_kprintf("prt:%0x\n",Charge_Bat_Task_ptr);
if(Charge_Bat_Task_ptr != RT_NULL)
{
rt_thread_startup(Charge_Bat_Task_ptr);
rt_kprintf("Charge_Bat_Task start...\n");
}
//初始化消息队列,创建消息队列
result = rt_mq_init(&mq_Charge,/*消息队列对象的句柄*/
"mqt_mq_Charge",/*消息队列的名称*/
&msg_pool_Charge[0], /*内存池指向msg_pool_Charge*/
1, /*每个消息的大小是1字节*/
sizeof(msg_pool_Charge), /* 内存池的大小是 msg_pool_Charge的大小*/
RT_IPC_FLAG_FIFO); /* 如果有多个线程等待, 按照先来先得到的方法分配消息 */
if (result != RT_EOK)
{
rt_kprintf("init message queue failed.\n");
}
}
@用RTT跑流水灯 应该是启用了,我在工程用动态方法创建的其他线程可以正常启动。
资源不够了吧
@用RTT跑流水灯我也觉得是资源不够,怎么优化?