Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread Studio
STM32H7
5
h743的奇怪问题,rt_kprintf不同的写法会影响其它代码执行速度
发布于 2021-12-10 21:25:34 浏览:1100
订阅该版
程序是rt studio的stm32h743工程,测试一段代码的执行速度(时长),通过rt_kprintf打印执行测试函数前后tick之差来查看,然后发现在相同的测试执行后rt_kprintf打印语句的写法使用: 正常写法 ```c test_fun(x); t = rt_tick_get()-t; rt_kprintf("...%d...", t ); //正常写法 ``` 缩减写法: ``` test_fun(x); rt_kprintf("...%d...", rt_tick_get()-t ); //缩减写法 ``` 结果有明显差异!test_fun(x)的一次执行时间是千ms以上,按理说不同写法生成的机器指令可能有差异,但在这里的影响每次就是几条指令ns级别的差异,而实际相差能达到几十tick(ms)以上,并且随着测试函数执行时间增加这个差异也随着增大。 测试函数`test_fun(x)`内部是重复执行另一段代码x次,实际上通过对比反编译的内容能确定在两种rt_kprintf语句的情形中 test_fun()及其子函数的汇编代码内容完全一致,那么怎么会导致这样明显的差异呢? 实际代码如下 ```c extern void test_loop_fun_do_none_c(int loops); int main(void) { int count = 1; rt_thread_delay(3000); rt_kprintf("C_vs_Cpp speed test...\n"); rt_tick_t t; while (count++){ uint32_t variable = count*10000; t = rt_tick_get(); test_loop_fun_do_none_c( variable ); t = rt_tick_get()-t; rt_kprintf("main.c run test_loop_fun_do_none_c(%d) use %d ticks\n", variable, t ); //正常写法 //rt_kprintf("main.c run test_loop_fun_do_none_c(%d) use %d ticks\n", variable, rt_tick_get()-t ); //缩减写法 rt_thread_mdelay(1000); } return RT_EOK; } ``` ```c //一个占一定时间的函数 float fun_do_none_c(float in){ float a[200]; float b[200]; for(int i=0; i<(sizeof(b)/sizeof(b[0])); i++){ a[i] = in+i; b[i] = in-i; } float tmp=0; for(int i=0; i<(sizeof(b)/sizeof(b[0])); i++){ tmp += a[i]*b[i]; if(tmp==0) tmp =1; //模拟一个异常 } return tmp; } void test_loop_fun_do_none_c(int loops){ float in=loops; for (int i=0; i
查看更多
2
个回答
默认排序
按发布时间排序
aozima
2021-12-10
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
看编译出来的汇编 以前看过一个案例,芯片还是stm32f103,编译出来的指令没有任何区别,但是稍微改几行与此无关的代码,执行速度就差一大截。 最后查出,其它地方代码小有不同,虽然不影响结果,但是造成所有指令地址挪动了一点点,然后恰好使一段循环代码分跨在2个FLASH块上面。 造成性能的一点点差异,但被循环非常多次,累计起来就差异很大。
张世争
2021-12-11
学以致用
- 可能放在rt_kprintf中执行与直接输出结果,处理的不一致,rt_kprintf输出本身占用根据波特率,ms级的时间,可能是异步输出。字符输出时按次序来的,rt_kprintf中的函数,执行晚了。 - 尝试下关中断输出
撰写答案
登录
注册新账号
关注者
1
被浏览
1.1k
关于作者
光脚板
这家伙很懒,什么也没写!
提问
5
回答
6
被采纳
0
关注TA
发私信
相关问题
1
rt_thread studio 啥时候能用呢
2
RT_Thread使用反馈帖子
3
RTT studio 下的 AT指令问题。
4
什么时候RTT Sdudio支持Ubuntu,Deepin和UOS操作系统
5
rt thread Studio 关于J-LINK下载问题
6
RT-Thread studio 调试设置问题
7
RTT-Studio 如何设置调试配置参数?
8
rt_thread studio 软件包配置
9
RT-Studio目前只能开发STM32的项目吗?
10
rtt studio 生成hex名字修改
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
张世争
8
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
KunYi
6
个答案
1
次被采纳
本月文章贡献
程序员阿伟
6
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部