搜索
bottom↓
回复: 4

关于RTT3.0.1 中rt_tick导致系统死机的问题

[复制链接]

出0入0汤圆

发表于 2011-4-6 17:18:21 | 显示全部楼层 |阅读模式
我的RTT在MDK 模拟运行时崩溃了. 我用的是3.0.1, 为了测试rt_tick到达RT_TICK_MAX的时候会发生什么情况, 我把RT_TICK_MAX设置成500: define RT_TICK_MAX 500  然后建立了4个线程, 最后发现程序执行void rt_tick_increase()
{
        struct rt_thread* thread;

        /* increase the global tick */
        if (rt_tick == RT_TICK_MAX)
        {
                /* switch to long timer list */
                rt_timer_switch();

                rt_tick = 0;

#ifdef TIMER_DEBUG
        rt_kprintf("rt_tick over flow\n");
#endif
               
打印"rt_tick over flow"后, RTT停了很久, 然后就崩溃了, 打印如下:

出0入0汤圆

 楼主| 发表于 2011-4-6 17:20:09 | 显示全部楼层
附上出错图片


出错打印 (原文件名:1.jpg)

出0入0汤圆

发表于 2011-4-16 23:20:55 | 显示全部楼层
悲剧。邈似是个没解决的bug

出0入0汤圆

发表于 2011-4-17 14:44:06 | 显示全部楼层
rt_tick_increase是在时钟中断中调用的
rt_kprintf是轮询方式
在中断中调用rt_kprintf显然不妥
建议楼主采用其他方式打印信息,如邮箱通知一个线程去打印

出0入0汤圆

发表于 2011-4-17 15:31:31 | 显示全部楼层
我怀疑这个是和他设置的 RT_TICK_MAX 500相关,可以考虑把rt_tick_t的定义更改为rt_uint8_t(这样也自动的把范围给改小了),当然也同时把RT_TICK_MAX更改为0xff;

0.4.0分支已经采用了其他的实现方式(与0.3.x系列完全不同),在0.4.0 beta2版本发布时,会相应的发布0.3.2版本,这个时候就采用了0.4.x分支的实现方式了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-6 15:55

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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