ZJU3220100620 2024-02-11 16:36 采纳率: 0%
浏览 15

ucos移植后编绎没问题,但烧录后ucos似乎没运行?

把正点原子精英板ucos2例程中,ucos2相关文件包含进了我用cubemx自行创建的工程中,然后把正点原子例程中一个,用ucos2实现led0,led1循环闪烁的代码,原封不动搬入我自己的工程,没用原子的SYSTEM文件,编译烧录没有问题,但运行后灯一直亮(gpio初始化就是灯亮),似乎是ucos没起作用?

  • 写回答

4条回答 默认 最新

  • GISer Liu 2024-02-11 16:37
    关注

    该回答引用自GPT-3.5,由博主GIS_Liu编写:

    针对您描述的问题,您遇到的情况可能是因为UCOS并未正确初始化或运行,导致程序未能按预期执行。以下是解决问题的思路和解决方案:

    问题分析:

    1. UCOS初始化问题: 可能UCOS的初始化过程存在问题,导致任务未正确创建或启动。
    2. 任务调度问题: 可能任务调度器未能正常工作,导致任务无法轮流执行。
    3. 硬件相关问题: 可能与硬件初始化有关,例如GPIO初始化或外设配置存在问题。

    解决方案:

    1. 确认UCOS初始化: 确保在代码中正确调用了UCOS的初始化函数,并检查是否有任何错误或警告信息。
    2. 检查任务创建: 确保LED任务已正确创建并加入了UCOS的任务列表中。可以通过打印消息或断点调试来确认任务是否已创建。
    3. 任务优先级设置: 确保任务的优先级设置正确,以确保任务按预期顺序执行。
    4. 调度器运行: 确保UCOS的调度器在启动后正常运行。可以通过监视任务状态或检查调度器的运行状态来确认。
    5. 检查硬件初始化: 确保硬件初始化正确,特别是涉及到LED的GPIO初始化,以及与UCOS相关的外设初始化。
    6. 日志和调试: 使用调试工具或在代码中添加日志信息,以帮助跟踪程序执行流程,找出问题所在。

    代码大纲:

    下面是一个简单的代码大纲,用于确保UCOS任务的创建和启动以及LED控制功能的正确实现:

    #include "ucos_ii.h"
    #include "led.h" // LED控制相关头文件
    
    #define LED0_TASK_PRIO 10
    #define LED1_TASK_PRIO 11
    #define LED0_TASK_STACK_SIZE 128
    #define LED1_TASK_STACK_SIZE 128
    
    // LED任务函数
    void LED0_Task(void *p_arg) {
        while (1) {
            LED0_Toggle(); // 切换LED0状态
            OSTimeDlyHMSM(0, 0, 1, 0); // 延时1秒
        }
    }
    
    void LED1_Task(void *p_arg) {
        while (1) {
            LED1_Toggle(); // 切换LED1状态
            OSTimeDlyHMSM(0, 0, 1, 0); // 延时1秒
        }
    }
    
    int main(void) {
        OSInit(); // UCOS初始化
    
        OSTaskCreate(LED0_Task, NULL, LED0_TASK_STACK_SIZE, LED0_TASK_PRIO);
        OSTaskCreate(LED1_Task, NULL, LED1_TASK_STACK_SIZE, LED1_TASK_PRIO);
    
        OSStart(); // 启动UCOS调度器
    
        while (1) {
            // 主循环,不应该执行到这里
        }
    }
    

    注意事项:

    • 确保UCOS的版本和配置与您使用的代码兼容。
    • 如果涉及到中断处理或其他RTOS相关的功能,确保正确配置了中断优先级和任务优先级。
    • 在代码中添加足够的日志信息,以便于调试和追踪程序执行流程。

    希望以上解决方案对您有所帮助,如果您有任何疑问或需要进一步的帮助,请随时提出。

    img

    如果该回答解决了您的问题,请采纳!如果没有,请详述问题所在!

    评论

报告相同问题?

问题事件

  • 创建了问题 2月11日