Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread Studio
STM32H7
5
h743的奇怪问题,rt_kprintf不同的写法会影响其它代码执行速度
发布于 2021-12-10 21:25:34 浏览:1172
订阅该版
程序是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.2k
关于作者
光脚板
这家伙很懒,什么也没写!
提问
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
【RT-Thread】【ci】【scons】将ci.attachconfig.yml和scons结合使用
2
Rt-thread中OTA下载后,bootloader不搬程序
3
ulog 日志 LOG_HEX 输出时间改为本地日期时间
4
在RT-Thread Studio中构建前执行python命令
5
研究一了一段时间RTT,直接标准版上手太难,想用nano,但又舍不得组件
热门标签
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
I2C_IIC
ESP8266
UART
WIZnet_W5500
ota在线升级
cubemx
PWM
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
xusiwei1236
8
个答案
2
次被采纳
踩姑娘的小蘑菇
1
个答案
2
次被采纳
用户名由3_15位
9
个答案
1
次被采纳
bernard
4
个答案
1
次被采纳
RTT_逍遥
3
个答案
1
次被采纳
本月文章贡献
聚散无由
2
篇文章
15
次点赞
catcatbing
2
篇文章
5
次点赞
Wade
2
篇文章
4
次点赞
Ghost_Girls
1
篇文章
7
次点赞
xiaorui
1
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部