硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3692|回复: 5
收起左侧

[CMSIS-RTOS] RTX+flash的问题求助

[复制链接]

91

主题

289

回帖

562

积分

金牌会员

积分
562
发表于 2017-2-19 00:50:54 | 显示全部楼层 |阅读模式
前几天移植好了COSIS-RTOS,今天把flash的例子加入进去,但是出现如下的问题,很奇怪

void AppTaskKeyPro(void const *argument)
{
    uint8_t ucKeyCode;   
    while(1)
    {
        ucKeyCode = GetKey();
        if (ucKeyCode != KEY_NONE)
        {
            switch(ucKeyCode)
            {
                case    JOY_DOWN_U:
                        osSignalSet(HandleTaskMsgPro,0x01);     /* 发送事件标志 */
                        printf("按键上按下\r\n");
                        break;
                case    JOY_DOWN_D:
                        osSignalSet(HandleTaskMsgPro,0x02);     /* 发送事件标志 */
                        printf("按键下按下\r\n");
                        break;
                default:
                    break;
            }
        }            
        osDelay(20);
    }   
}


void AppTaskMsgPro(void const *argument)
{
    osEvent evt;   
    while(1)
    {
        evt = osSignalWait(0x03, 500);          /* 等待事件标志 */
        if(evt.status == osEventSignal)
        {     
            LedToggle(3);
        }
    }
}

首先定义一个任务是按键处理任务,当发送了2个事件后,让第三个灯状态取反,这个是正常的。
当把flash部分的程序加入后,在sf_ReadID函数中设置断点,能够读到ID值,
1、如果在上面void AppTaskMsgPro(void const *argument)函数中,LedToggle(3)后面加入sf_ReadTest();时,按下任何一个按键后,程序就死了,main函数堆栈溢出overflow,不按按键程序不会死。
2、最奇怪的是如果把sf_ReadTest()屏蔽,甚至把sf_InitHard();初始化函数都屏蔽,此时程序是恢复到最初“事件标志组”程序,应该是能够正常工作了,但是此时如果按任何按键,程序还是死了,还是main函数堆栈溢出overflow。
只有把flash相关的整个文件移除才正常。
以上2个问题应该怎么处理才对呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106997
QQ
发表于 2017-2-19 09:57:42 | 显示全部楼层
1.  那个任务的任务栈溢出,就把那个任务的栈空间加大一倍,还溢出,就继续加大,直到没有任务溢出了。
2. 你先的这些初始化,引脚使用上没有公用吧,如果工程正常的话,应该不会有这些问题的。
回复

使用道具 举报

91

主题

289

回帖

562

积分

金牌会员

积分
562
 楼主| 发表于 2017-2-19 11:03:41 | 显示全部楼层
上面描述中,在sf_ReadID函数中设置断点,能够读到ID值,工作正常,但是如果在sf_ReadID函数最后加入“打印ID值的命令”,程序也会死,不知道为什么。
1、我只是在AppTaskMsgPro任务中加入sf_ReadTest(),应该是这个任务的堆栈溢出啊,为什么是main溢出呢?
2、这个就是最让我感到奇怪的了,我把和flash相关的函数和初始化都屏蔽了,应该就是恢复到最开始的事件标志组程序了,应该是能正常工作 啊,可事实不是这样,新建个工程,加入除flash以外的文件,就正常了。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106997
QQ
发表于 2017-2-20 00:48:25 | 显示全部楼层

回 feiante 的帖子

feiante:上面描述中,在sf_ReadID函数中设置断点,能够读到ID值,工作正常,但是如果在sf_ReadID函数最后加入“打印ID值的命令”,程序也会死,不知道为什么。
1、我只是在AppTaskMsgPro任务中加入sf_ReadTest(),应该是这个任务的堆栈溢出啊,为什么是main溢出呢?
2、这个就是最让我感 .. (2017-02-19 11:03) 
是不是你的工程模板有问题,后面有精力了,我也开始搞搞CMSIS-RTOS。
回复

使用道具 举报

91

主题

289

回帖

562

积分

金牌会员

积分
562
 楼主| 发表于 2017-2-20 10:59:57 | 显示全部楼层
在F1的板子上移植TFT显示(没有使用emwin),都是正常的,然后串口和按键也都是正常的。flash的程序在RTX下也不行。
eric2013要是有精力了,最好多做一些RTX下的例程,比如原来的裸机例程转换。利于帮助大家以后工程能从裸机顺利转向带操作系统。
呵呵
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106997
QQ
发表于 2017-2-21 09:46:57 | 显示全部楼层

回 feiante 的帖子

feiante:在F1的板子上移植TFT显示(没有使用emwin),都是正常的,然后串口和按键也都是正常的。flash的程序在RTX下也不行。
eric2013要是有精力了,最好多做一些RTX下的例程,比如原来的裸机例程转换。利于帮助大家以后工程能从裸机顺利转向带操作系统。
呵呵
 (2017-02-20 10:59) 
好的[s:142]
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-13 21:40 , Processed in 0.268112 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表