请教坛友,FREERTOS一创键任务IO口就虚空是怎么回事?
请教坛友,FREERTOS一创键任务IO口就虚空是怎么回事?灯也不亮,把任务屏蔽掉灯就亮了. 难道任务能影响IO?void LedTask1(void)
{
while(1)
{
GPIO_ResetBits(GPIOC, GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12);
vTaskDelay(1000); // 睡眠1000ms
}
}
/**********************************************/
/* */
/* LED周期性闪烁任务2 */
/* */
/**********************************************/
void LedTask2(void)
{
while(1)
{
GPIO_ResetBits(GPIOC, GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12);
vTaskDelay(1000); // 睡眠1000ms
}
}
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); // 一定要将优先级分组设置分组方式4!!!
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE); // 不使用JTAG调试,对应的IO口作为普通IO口使用
LED_Init();
/* 创建LED1任务 */
xTaskCreate((TaskFunction_t)LedTask1, // 任务函数指针
"LED_TASK1", // 任务名称
40, // 堆栈深度(字)
NULL, // 任务参数为空
1, // 任务优先级
NULL ); // 任务句柄为空
/* 创建LED2任务 */
xTaskCreate((TaskFunction_t)LedTask2, "LED_TASK2", 40, NULL, 2, NULL );
/* 启动任务调度器(操作系统开始运行) */
vTaskStartScheduler();
/* 不应该运行到这里 */
while(1)
{
GPIO_ResetBits(GPIOC, GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12);
}
}
堆栈深度40改大一点试试看 liwei_jlu 发表于 2021-12-14 18:41
堆栈深度40改大一点试试看
谢谢,不行,没反应。改成80也不行 完全不知道你想干嘛。。。。2个任务都拉低gpio,你先写一个任务。
void LedTask1(void)
{
while(1)
{
GPIO_ResetBits(GPIOC, GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12);
vTaskDelay(pdMS_TO_TICKS(500)); // 延时500ms
GPIO_SetBits(GPIOC, GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12);
vTaskDelay(pdMS_TO_TICKS(500)); // 延时500ms
}
} zjykwym 发表于 2021-12-14 18:53
完全不知道你想干嘛。。。。2个任务都拉低gpio,你先写一个任务。
void LedTask1(void)
{
谢谢,刚开始就是这样,一样的结果,不创建任务就会闪,创建任务灯就不亮也不闪。 整个项目发出来,我个你看看 怎么没 debug 的结果呢?是不是代码死在哪里了? 这东西单步执行 ,一下就找到问题在哪里了。 zjykwym 发表于 2021-12-14 18:57
整个项目发出来,我个你看看
好的,谢谢,里面带仿真的。 chunjiu 发表于 2021-12-14 19:01
怎么没 debug 的结果呢?是不是代码死在哪里了?
任务在执行着,就是IO口受影响了。 lixin91985 发表于 2021-12-14 19:33
这东西单步执行 ,一下就找到问题在哪里了。
就是创建任务这里有变化,看不出来哪里问题。 本帖最后由 chunjiu 于 2021-12-15 08:53 编辑
ZHAOBAO511 发表于 2021-12-15 08:38
任务在执行着,就是IO口受影响了。
兄弟调试程序代码是靠猜的吗? {:sweat:}
在任务里打个断点看看有没有进去、以及怎么设置 IO 的不就知道了 ... ZHAOBAO511 发表于 2021-12-15 08:37
好的,谢谢,里面带仿真的。
按照昨天我给你写的代码,完全没有问题。下面是我用逻辑分析仪抓的波形。
我用的是stm32f103vct6。 chunjiu 发表于 2021-12-15 08:51
兄弟调试程序代码是靠猜的吗?
在任务里打个断点看看有没有进去、以及怎么设置 IO 的不就知 ...
打了断点都没问题,就是IO口给悬空了,百思不得其解。 zjykwym 发表于 2021-12-15 09:48
按照昨天我给你写的代码,完全没有问题。下面是我用逻辑分析仪抓的波形。
我用的是stm32f103vct6。 ...
好的,谢谢,我再看看。 zjykwym 发表于 2021-12-15 09:48
按照昨天我给你写的代码,完全没有问题。下面是我用逻辑分析仪抓的波形。
我用的是stm32f103vct6。 ...
不对,我这个程序就是从VCT6改过来的,就是一启动任务就有问题。{:lol:} 里面有PROTEUS仿真。看端口就是虚空了,灯不闪。 ZHAOBAO511 发表于 2021-12-15 11:46
打了断点都没问题,就是IO口给悬空了,百思不得其解。
1、断开负载测电平输出状态
2、不行就换 mcu ZHAOBAO511 发表于 2021-12-15 11:51
不对,我这个程序就是从VCT6改过来的,就是一启动任务就有问题。 里面有PROTEUS仿真。看端口就是 ...
买个开发板吧,别浪费那时间了。。。 chunjiu 发表于 2021-12-15 11:51
1、断开负载测电平输出状态
2、不行就换 mcu
断不断都是一样,暂时不换。 zjykwym 发表于 2021-12-15 15:53
买个开发板吧,别浪费那时间了。。。
好的,我再研究研究,谢谢 吃不消,原来是PROTEUS仿真,这玩意真的靠谱吗?一直怀疑。 zchong 发表于 2021-12-15 17:54
吃不消,原来是PROTEUS仿真,这玩意真的靠谱吗?一直怀疑。
99%是对的,别小看这个,当您想学点东西的时侯很有用,桌面摆的太多领导一眼就看出您在学习,万一这时侯他不想让您学习的时侯就有用了。 ZHAOBAO511 发表于 2021-12-15 11:51
不对,我这个程序就是从VCT6改过来的,就是一启动任务就有问题。 里面有PROTEUS仿真。看端口就是 ...
把灯的线删掉,重新画。可能之前有线短路了 zwhzwh_11 发表于 2021-12-15 20:57
把灯的线删掉,重新画。可能之前有线短路了
谢谢,整个OS就没正式启动,虽然单步可以走。 本帖最后由 ZHAOBAO511 于 2023-5-27 14:06 编辑
ZHAOBAO511 发表于 2021-12-16 08:25
谢谢,整个OS就没正式启动,虽然单步可以走。
(引用自24楼)
可以用的。#define configTOTAL_HEAP_SIZE ((size_t)(4*1024)) //系统所有总的堆大小这里设置有误
页:
[1]