Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
AC6
有关KEIL AC6的__rt_ffs函数的编译器优化问题
发布于 2023-01-16 22:26:15 浏览:659
订阅该版
[tocm] # 有关KEIL AC6的__rt_ffs函数的编译器优化问题 ## 编译环境 - KEIL MDK5.38 - AC6 V6.19 - STM32H750 ART-PI ## 使用场景 - 使用到了SD卡,使用了SDIO驱动 - 编译优化选择-OZ优化下,SD卡初始化失败 - 编译优化选择-O0优化下,SD卡初始化成功 ## 问题 - 排查之后,发现在mmcsd_select_voltage函数中**__rt_ffs**函数执行后有问题. - 具体问题代码如下 ```c /* * Mask off any voltages we don't support and select * the lowest voltage */ rt_uint32_t mmcsd_select_voltage(struct rt_mmcsd_host *host, rt_uint32_t ocr) { int bit; extern int __rt_ffs(int value); ocr &= host->valid_ocr; bit = __rt_ffs(ocr); if (bit) { bit -= 1; ocr &= 3 << bit; host->io_cfg.vdd = bit; mmcsd_set_iocfg(host); } ``` ### AC6编译器的 __rt_ffs 函数代码如下 ```c #elif defined(__clang__) int __rt_ffs(int value) { __asm volatile( "CMP %1, #0x00 \n" "BEQ 1f \n" "RBIT %1, %1 \n" "CLZ %0, %1 \n" "ADDS %0, %0, #0x01 \n" "1: \n" : "=r"(value) : "r"(value) ); return value; } ``` ### 单独对__rt_ffs函数使用__attribute__((optnone))不优化 SD卡初始化成功 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230116/51e88283c96126b23b3dc088212de36f.png) 细节如下 - 进入__rt_ffs函数前ocr = 0x00300000 - 进入__rt_ffs函数后ocr = 0x00300000 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230116/3dd7b2654014ec38b2fa1a8bb22c38de.png.webp) - 导致返回ocr为0x00300000,SD卡初始化成功 ### 使用-Oz优化 勾选LTO SD卡初始化失败 细节如下 - 进入__rt_ffs函数前ocr = 0x00300000 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230116/4632cbdebe0b4bad5f3272b4cb5a342d.png.webp) - 进入__rt_ffs函数后ocr = 0x00C00000 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230116/f5a862c60f161bbf3fe848ff3660db77.png.webp) - 导致返回ocr为0,SD卡初始化失败 ## __rt_ffs函数汇编代码如下 使用-Oz优化 勾选LTO ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230116/90213c68125d97875b5519e16dcc44f7.png) ## __rt_ffs函数汇编代码如下 使用__attribute__((optnone))不优化 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230116/688f0ed293ab703f5772b5bb59ccecd7.png) ## 疑惑 - 为什么会造成这个情况?汇编代码不熟悉,明天学一下,看一下是什么问题.有没有大佬可以先帮忙看一下是什么原因. - 我在其他工程中,调度器中使用了__rt_ffs函数,不优化也会造成运行不正常. - 是否应该rtt的此段代码就应该默认添加上__attribute__((optnone))进行不优化呢?
查看更多
StackYuan
认证专家
2023-01-17
这家伙很懒,什么也没写!
__rt_ffs这个函数本质上是挑出入参的第一个bit 1所在的位置,按照你的调试界面看汇编并没有被优化掉,问题在别处,建议看看if判别那边的位置
1
个回答
默认排序
按发布时间排序
撰写答案
登录
注册新账号
关注者
1
被浏览
659
关于作者
用户名由3_15位
这家伙很懒,什么也没写!
提问
63
回答
242
被采纳
34
关注TA
发私信
相关问题
1
RTThread目前不支持AC6吗?
2
Keil AC6, Nano 的 FinSH 功能失效了,怎么恢复正常?
3
ART-PI工程用MDK5 AC6编译器报错
4
rtthread_simulator_v0.1.0,怎么不支持ac6啊??
5
AC6编译报错unsupported option '--c99'解决办法
6
使用CUBE_MX生成MDK NANO工程,AC6编译报错
7
AC6(arm compiler 6)编译器怎么识别ASM汇编?
8
MKD AC5升级到AC6 --c99错误解决方法
9
MDK使用AC6编译报错!
10
AC6.x编译器问题请教
推荐文章
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
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部