出出啊
出出啊
It is Not the Mountain We Conquer, but Ourselves

注册于 6 months ago

回答
893
文章
19
关注者
55

会溢出,但是 rt_tick 是无符号整型,所有无符号整型的操作结果还是无符号整型
两个无符号整型的减法操作仍然是无符号整型。大数减小数就不说了,小数减大数的时候隐藏有个借位,结果也在预期内,即便溢出后的值变小了,减去之前的大值也不会出错。
加法操作同理,随意结果超出可表达的最大值,但是不影响后续比较操作。

先问句题外话啊,下载 4.0.4 release 包,用开发板能直接跑 bsp 里的 stm32f407-atk-explorer 项目吗?我的 f429-atk-apollo 竟然出现调度跑飞,重启现象,找了很久肯定是在第一次切换到第一个任务的时候跑飞了。

下面说你的定位问题方案:
打开 telnet.c 文件,找到 telnet_thread 函数里的第二个 while 循环。
在 recv 这里打断点,能不能进入 process_rx 分支,或者是走了 client_close

真对这两种情况,分别跟踪决定下一步怎么走。

div 换成 float
我有篇文章讲 cmbacktrace 的,里面有讲过这个问题

那个vs编译器的判断...
可能曾经有人想移植到win上用vs编译,然后模拟器启动,之后就没之后了。
使用nano版本要极其小心初始化顺序。其实,标准版本里也有这种让人迷惑的行为。初始化串口过程中就有调用 rt_kprintf 的可能
没有把控制台串口清晰,无任何系统依赖的进行初始化配置。这一点儿,让初始接触 rtt 框架学习者摸不着头脑

有没有检查过系统时钟?主频正常不?
spi频率正常不?用示波器看一下频率。
去我的文章里看看系统调试利器。帮你在系统查看内核状态。

U盘还是sd卡?
驱动有问题,把文件系统写坏了。

流产了。如果自己对芯片架构比较熟悉,还是自己花精力搞起来。

仅仅拷贝文件,大小没变,内容就变了?而且还仅仅针对那一个文件出错?

很多没来得及做的,rtt 完整支持 posix 之日,可能就是放弃实时性之时了。

gitee上提交的半年没人理睬,github上提交的很快就能合并,重机器审查,无人关心提交代码里的隐患

ethernetif.c 文件里有很多 bug 。细节请看我的文章。

要求这么高,还是不要用系统了。频繁任务调度切换任务反而降低系统效率。
用中断驱动比用任务驱动实时性更高。

说起来延长定时器的操作,这个可以自己改源码实现,修改 control 函数的实现,增加一种 control 命令字,
以下面 SET 命令为例,它修改的 init_tick 成员。完全可以根据自己的需求添加一个修改 timer->timeout_tick 成员的命令。

    case RT_TIMER_CTRL_SET_TIME:
        timer->init_tick = *(rt_tick_t *)arg;
        break;

inline 分两种,一种是在头文件定义的,一种是源码文件内部定义的。或者说一种是全局inline 一种是局部inline(这些不是专业说法,专业说法请百度)。
但是,针对后一种,必须定义为static inline。前一种必须在头文件里定义声明。
高版本编译器也可能没有这个问题,但是上面的用法还是遵循比较好,兼容性高。

回到
顶部

发布
问题

投诉
建议