3565|2

314

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

LM3S9B96 safertos启动调度器失败? [复制链接]

将官方例程去掉几个任务后,就剩下空闲任务、LED任务和显示任务,运行一下,液晶屏显示:Failed to start scheduler!,这说明几个任务都创建成功了,但是调度器为什么会启动失败呢?看了下手册,调度器启动失败的可能原因有:1.在启动调度器之前没有创建任务。2.调度器已经在运行中。3.调度器不能启动空闲任务。
难道是调度器不能启动空闲任务?不明白啊。。
int
main(void)
{
    tContext sContext;
    tRectangle sRect;

    // Set the clocking to run at 80 MHz from the PLL.
    ROM_SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ |
                       SYSCTL_OSC_MAIN);

    // Initialize the device pinout appropriately for this board.
    PinoutSet();

    Kitronix320x240x16_SSD2119Init();// 初始化显示驱动

    // 初始化图形设备上下文
    GrContextInit(&sContext, &g_sKitronix320x240x16_SSD2119);

    // Fill the top 24 rows of the screen with blue to create the banner.
    sRect.sXMin = 0;
    sRect.sYMin = 0;
    sRect.sXMax = GrContextDpyWidthGet(&sContext) - 1;
    sRect.sYMax = 23;
    GrContextForegroundSet(&sContext, ClrDarkBlue);
    GrRectFill(&sContext, &sRect);

    // Put a white box around the banner.
    GrContextForegroundSet(&sContext, ClrWhite);
    GrRectDraw(&sContext, &sRect);

    // Put the application name in the middle of the banner.
    GrContextFontSet(&sContext, &g_sFontCm20);
    GrStringDrawCentered(&sContext, "safertos-demo", -1,
                         GrContextDpyWidthGet(&sContext) / 2, 10, 0);

    // 设置系统堆栈的位置和大小
    g_sSafeRTOSPortInit.pulSystemStackLocation =
        (unsigned portLONG *)(*(unsigned long *)0);
    g_sSafeRTOSPortInit.ulSystemStackSizeBytes = 128 * 4;

    // 设置向量表的位置
    g_sSafeRTOSPortInit.pulVectorTableBase =
        (unsigned portLONG *)HWREG(NVIC_VTABLE);

    // 初始化SafeRTOS内核
    vTaskInitializeScheduler((signed portCHAR *)g_pulIdleTaskStack,
                             sizeof(g_pulIdleTaskStack), 0,
                             &g_sSafeRTOSPortInit);

    // 创建显示任务
    if(DisplayTaskInit() != 0)
    {
        GrContextForegroundSet(&sContext, ClrRed);
        GrStringDrawCentered(&sContext, "Failed to create display task!", -1,
                             GrContextDpyWidthGet(&sContext) / 2,
                             (((GrContextDpyHeightGet(&sContext) - 24) / 2) +
                              24), 0);
        while(1)
        {
        }
    }

    // 创建LED任务
    if(LEDTaskInit() != 0)
    {
        GrContextForegroundSet(&sContext, ClrRed);
        GrStringDrawCentered(&sContext, "Failed to create LED task!", -1,
                             GrContextDpyWidthGet(&sContext) / 2,
                             (((GrContextDpyHeightGet(&sContext) - 24) / 2) +
                              24), 0);
        while(1)
        {
        }
    }

    // 启动调度器,这将没有返回
    xTaskStartScheduler(pdTRUE);   

    // 如果调度器由于某种原因返回,打印错误并无限循环
    GrContextForegroundSet(&sContext, ClrRed);
    GrStringDrawCentered(&sContext, "Failed to start scheduler!", -1,
                         GrContextDpyWidthGet(&sContext) / 2,
                         (((GrContextDpyHeightGet(&sContext) - 24) / 2) + 24),
                         0);
    while(1)
    {
    }
}

最新回复

没用过 SafeRTOS,再用 RL-RTX。 应该是第三种原因吧。g_sSafeRTOSPortInit 这是是在哪里的呢?  详情 回复 发表于 2013-5-8 12:56

点评

没用过 SafeRTOS,再用 RL-RTX。 应该是第三种原因吧。g_sSafeRTOSPortInit 这是是在哪里的呢?  详情 回复 发表于 2013-5-8 12:56
 
点赞 关注

回复
举报

13

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
没怎么看懂!!
 
个人签名www.cqbt120.com
 

回复

1803

帖子

0

TA的资源

五彩晶圆(高级)

板凳
 

回复 楼主 喜鹊王子 的帖子

没用过 SafeRTOS,再用 RL-RTX。
应该是第三种原因吧。g_sSafeRTOSPortInit 这是是在哪里的呢?
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表