建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
请选择 进入手机版 | 继续访问电脑版
设置昵称

在此一键设置昵称,即可参与社区互动!

确定
我再想想
选择版块

digaodigao

发帖: 3粉丝: 0

级别 : 新手上路

Rank: 1

发消息 + 关注

发表于2018-11-30 17:58:38 2195 9 楼主 显示全部楼层
[问题求助] stm32F103VC的板子,移植好了代码但是进程没有跑起来

环境:
     单板stm32F103VC
     keil5

问题:现在编译和烧录都是好的,但是进程没有调度到,代码如下,如果正常的话,count的值会不停的累加,但是貌似没有进程没有调度起来。
          有大神帮忙看看吗?
(头文件不粘贴了)


UINT32 g_TestTskHandle;
int count = 0;

VOID task1(void)
{
     UINT32 uwRet = LOS_OK;

      while(1)
    {
         count++;
         uwRet = LOS_TaskDelay(1000);
         if(uwRet !=LOS_OK)
          return;
    }
}


UINT32 create_task1(void)
{
    UINT32 uwRet = LOS_OK;
    TSK_INIT_PARAM_S task_init_param;
    task_init_param.usTaskPrio = 1;
    task_init_param.pcName = "task1";
    task_init_param.pfnTaskEntry = (TSK_ENTRY_FUNC)task1;
    task_init_param.uwStackSize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE;
    uwRet = LOS_TaskCreate(&g_TestTskHandle,&task_init_param);

    if(uwRet !=LOS_OK)

  {
        return uwRet;
   }

    return uwRet;
}



int main(void)
{
    UINT32 uwRet = LOS_OK;

    uwRet = LOS_KernelInit();
    if (uwRet != LOS_OK)
    {
        return LOS_NOK;
    }
  
  uwRet = create_task1();
    if (uwRet != LOS_OK)
    {
        return LOS_NOK;
    }
    LOS_Start();
}

上图中,已经走到了LOS_Strart了,表示create_task1的返回结果是正常的,然后count的值没有变化,



跟踪了一下代码,发现los_dispatch_keil.S这个文件里面的两个函数有一个没有走到,如下图,走完了osTaskSchedule之后就跑飞了,(只知道汇编的位置,不知道对应的C代码是哪里见图中汇编部分),然后后面的osPendSV一直没有进来,请问有啥好方法可以快速定位到代码是在哪里卡主了吗?

Image 2.png







举报
分享

分享文章到朋友圈

分享文章到微博

digaodigao

发帖: 3粉丝: 0

级别 : 新手上路

Rank: 1

发消息 + 关注

发表于2018-12-1 09:37:53 沙发 显示全部楼层

昨天的问题有用单步跟踪了一下见图:Image 7.png

是这个puwBufferSize的值为0 而这个puwBuffersize的值是这个结构体的大小

Image 6.png

而这个结构体的大小为啥会是0??这个有些奇怪,如果是sizeof(stSwtmrHandle)的值为0 还可以理解一下,然后这会是导致程序跑不下去的原因吗?希望有大神能够回答下,谢谢!

Image 8.png

点赞 回复 举报

digaodigao

发帖: 3粉丝: 0

级别 : 新手上路

Rank: 1

发消息 + 关注

发表于2018-12-1 14:58:51 板凳 显示全部楼层

后面问了一个朋友,他移植成功的板子如果单步调试按F11的话,也会停在for循环那边如果用F10调试就可以到task里面

而我这边用F10调试的话,在中断锁这个地方就会跑飞,有谁能知道原因的吗?

Image35.png

点赞 回复 举报

mike_Peng

发帖: 6粉丝: 5

级别 : 版主

Rank: 7Rank: 7Rank: 7

发消息 + 关注

发表于2018-12-4 15:13:00 地板 显示全部楼层

这段代码,貌似没有用到SwTimer

至于结构体大小为0,请你检查一下编译器优化级别。把优化改成O(0),再调试一下

点赞 回复 举报

六斤

发帖: 28粉丝: 14

级别 : 版主

Rank: 7Rank: 7Rank: 7

发消息 + 关注

发表于2018-12-4 20:21:16 5# 显示全部楼层

问题描述真的是有点长,感谢mike耐心解答~

点赞 回复 举报

一条咸鱼

发帖: 5粉丝: 0

级别 : 新手上路

Rank: 1

发消息 + 关注

发表于2018-12-5 11:41:22 6# 显示全部楼层

我移植完也跑不起来。。。简单debug F11直接报错如图,楼主解决了吗?TIM图片20181205113939.png

点赞 回复 举报

digaodigao

发帖: 3粉丝: 0

级别 : 新手上路

Rank: 1

发消息 + 关注

发表于2018-12-5 17:35:50 7# 显示全部楼层

编译器优化一直是level0,先谢谢两位版主大大的关注


问题还是没有能解决


我用简单的语言描述一下,就是移植完了操作系统后,想试试效果

然后自己写了一个main函数(上面贴出来了),在main里面就调用了一个task而已

然后发现这task没有调用到,所以自己单步循环跟踪

发现在los_queue.c这个文件的325行的uvIntSave = LOS_IntLock()//关闭所有的中断

这个函数这儿按F10就卡主了,而同样的小伙伴在这里按F10就可以跳到下面去。

我们都按F11单步调试的话,都会到那个for循环然后出不来。。

问题是为啥我的机器在这个函数按了F10就卡主了

我是F103vc的板子 他的是F103ve的板子,只有内存和flash大小的区别,该区别体现在sct文件里面已经改过了,是不是还有其他没有注意的地方?

先谢谢各位!

Image35.png





点赞 回复 举报

一条咸鱼

发帖: 5粉丝: 0

级别 : 新手上路

Rank: 1

发消息 + 关注

发表于2018-12-6 10:40:12 8# 显示全部楼层
digaodigao 发表于 2018-12-5 17:35 编译器优化一直是level0,先谢谢两位版主大大的关注问题还是没有能解决我用简单的语言描述一下,就是移植完 ...

道友,问题解决了吗?我这边也移植了一个程序,也运行不了。方便留个联系方式吗?QQTIM图片20181206101104.png

点赞 回复 举报

三虎

发帖: 0粉丝: 0

级别 : 新手上路

Rank: 1

发消息 + 关注

发表于2019-3-12 23:40:03 9# 显示全部楼层
一条咸鱼 发表于 2018-12-6 10:40 道友,问题解决了吗?我这边也移植了一个程序,也运行不了。方便留个联系方式吗?QQ

不拆台的问问,大家有没对比下LiteOS和MiCO?有没有熟悉的道友对比一下两者,谢谢!

点赞 回复 举报

非啊飞啊

发帖: 0粉丝: 0

级别 : 新手上路

Rank: 1

发消息 + 关注

发表于2019-6-26 10:00:41 10# 显示全部楼层

我当时L4的接管中断的版本也运行不起来,不知道楼主有没有

把启动文件改为“los_startup_keil.s”,非接管中断不用

点赞 回复 举报

游客

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