此用户很懒
此用户很懒

注册于 1 year ago

回答
1
文章
0
关注者
0

通过修改keil.py 实现了想要的需求,做了如下修改。
image.png

1、找到所有的头文件路径列表 将脚本中的路径写入target
2、找到所有宏定义列表 将脚本中的宏定义写入target,并加上了template中的宏定义
3、将到链接列表 将脚本中的链接选项写入所有target.
实现效果
模板工程
image.png
项目工程
image.png
感谢大佬 @我夏了夏天 的帮助

whj467467222 发表于 2019-10-15 08:44
按照MODBUS从机报文机制,最大的报文数据是0XFF


从机根据自身资源大小会对最大长度有限制,好比说255个寄存器,就需要500多个字节的数据缓存区,对内存开销并不小,而且数据长度过长,加大了通讯校验失败的概率,也加长了单次通讯的时间。

1、主机一次可以读多少个数据,和从机有关。一般你如果读的数据长度超范围了,从机会返回异常码。
2、读不到数是什么?以Modbus RTU为例,串口接收中断收不到数据还是数据错乱?可以通过波形看发送数据和接收数据有没有重叠?建议测试可以将定时轮旬的间隔先设长一点比如5S发送一次,待测试OK,再加快速率。

bernard 发表于 2019-10-14 14:53
已经考虑到了回绕的机制,所以没什么影响。如果真的有影响,会涉及到:
1. 定时器的最大范围只有UINT32_MAX ...


所以应用程序中为了确保时间准确性还是用定时器,可是内核中有很多地方如ipc.c中,都有通过rt_tick_get来获取时间差,不知道在回绕的时候有没有问题呢,以下面代码为例,出现回绕时,timeout就为0了。
       /* if it's not waiting forever and then re-calculate timeout tick */
if (timeout > 0)
{
tick_delta = rt_tick_get() - tick_delta;
timeout -= tick_delta;
if (timeout < 0)
timeout = 0;
}

tyustli 发表于 2019-10-14 14:07
楼主可以算算这个值溢出需要多少时间,有生之年是不会溢出的


换算成十进制也就是4,294,967,295‬;按照10ms一个tick累加,约1.3年就溢出了。

5l正解。补充一下。tshell优先级为20,设置的thread1线程为8,thread2线程优先级为6。当这种情况,shell执行到线程1启动之后,挂起,线程1开始运行,待线程1挂起后,再运行shell,启动线程2,线程2因为优先级更高,后面再按照,线程2-->shell-->线程1执行。
线程优先级.PNG

发布
问题