打印
[STM32F1]

stm32 uCOS 的一个问题,搞的要发疯了(已解决)

[复制链接]
5362|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
thinkabout4451|  楼主 | 2015-1-17 15:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 thinkabout4451 于 2015-1-17 16:14 编辑

最简单的两个hello world任务。
在BSP_Init函数里,ms不能做太多事情,比如增加几个printf就不行了。(之前是增加了一个lcd的初始化函数)
现象就是打印几个aaaaa就没反映了,如果修改代码只打印一两个aa等,就没问题,能正常进任务往下跑。
其实最开始发现这个问题:是BSP_Init里增加一个lcd12864的初始化,就不行,但如果放到后面的任务初始化里就没问题。

搞的头大,有没有大侠了解这个情况来着,非常感谢


代码如下:


void BSP_Init(void)
{
    RCC_Configuration();
    SysTick_init();
    InitLED();
    Init_Usart1();
    printf("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\r");
    printf("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\r");
    printf("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\r");
    printf("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\r");
}



int main(void)
{


    OS_ERR err;

    /* 板级初始化 */
    BSP_Init();

    /* 初始化"uC/OS-III"内核 */
    OSInit(&err);

    /*创建任务*/
    OSTaskCreate((OS_TCB     *)&StartUp_TCB,                // 任务控制块指针
                 (CPU_CHAR   *)"StartUp",                                // 任务名称
                 (OS_TASK_PTR )Task_Start,                         // 任务代码指针
                 (void       *)0,                                              // 传递给任务的参数parg
                 (OS_PRIO     )STARTUP_TASK_PRIO,                              // 任务优先级
                 (CPU_STK    *)&StartUp_Stk[0],                    // 任务堆栈基地址
                 (CPU_STK_SIZE)STARTUP_TASK_STK_SIZE/10,          // 堆栈剩余警戒线
                 (CPU_STK_SIZE)STARTUP_TASK_STK_SIZE,                          // 堆栈大小
                 (OS_MSG_QTY  )0,                                              // 可接收的最大消息队列数
                 (OS_TICK     )0,                                              // 时间片轮转时间
                 (void       *)0,                                              // 任务控制块扩展信息
                 (OS_OPT      )(OS_OPT_TASK_STK_CHK |
                                OS_OPT_TASK_STK_CLR),              // 任务选项
                 (OS_ERR     *)&err);                                    // 返回值

    /* 启动多任务系统,控制权交给uC/OS-II */
    OSStart(&err);

}
找到原因了, SysTick_init(); 最在最后就行了
估计是执行到就开始了cpu的时间调度了。。。




沙发
thinkabout4451|  楼主 | 2015-1-17 15:59 | 只看该作者
自己沙发,试着修改ucos的配置,没什么效果。。。

使用特权

评论回复
板凳
shangjianan| | 2015-5-14 21:40 | 只看该作者
楼主有没有ucosii的源代码?给我一份呗

使用特权

评论回复
地板
a526374696| | 2017-4-11 14:18 | 只看该作者
楼主啊,这问题啊怎么解决啊,我发现现在也遇到这情况啊

使用特权

评论回复
5
yiy| | 2017-4-11 21:10 | 只看该作者
配置好了再启动心跳。

使用特权

评论回复
6
yiy| | 2017-4-11 21:14 | 只看该作者
这么隐蔽的问题都被楼主搞定了。

使用特权

评论回复
7
biechedan| | 2017-4-11 23:10 | 只看该作者
变量共享还没有搞懂。

使用特权

评论回复
8
biechedan| | 2017-4-11 23:13 | 只看该作者
互斥变量都有什么其他作用吗

使用特权

评论回复
9
codeburner| | 2017-11-21 13:28 | 只看该作者
前辈您好,我最近在学习ucos-ii,遇到了一个问题,希望您能指导一下。我重定向了fputc,裸机可以调用printf串口打印字符串,但在移植ucos-ii的stm32C8T6上调用printf出错了,程序卡死在这句话上while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);。请问您知道这是什么原因造成的吗??

使用特权

评论回复
10
fhqmcu| | 2017-11-21 18:11 | 只看该作者
看看bsp初始化的堆栈大小,这个堆栈不是任务堆栈,是系统的堆栈,os配置里有的,改大一些。

使用特权

评论回复
11
junpeng324| | 2017-11-21 22:18 | 只看该作者
codeburner 发表于 2017-11-21 13:28
前辈您好,我最近在学习ucos-ii,遇到了一个问题,希望您能指导一下。我重定向了fputc,裸机可以调用printf ...

参考正点原子的,他们的资料很棒啊。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

426

帖子

7

粉丝