Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
AC6
有关KEIL AC6的__rt_ffs函数的编译器优化问题
发布于 2023-01-16 22:26:15 浏览:435
订阅该版
[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
被浏览
435
关于作者
用户名由3_15位
这家伙很懒,什么也没写!
提问
53
回答
113
被采纳
16
关注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
机器人操作系统 (ROS2) 和 RT-Thread 通信
4
五分钟玩转RT-Thread新社区
5
国产MCU移植系列教程汇总,欢迎查看!
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
CherryUSB虚拟串口使用
2
Vision Board 开箱
3
【英飞凌测评】rtthread cyw43012软件包蓝牙编程和智能门锁示例
4
程序的起点(rt-smart &amp; k230)
5
CmBacktrace软件 Log 信息保存移植重写
热门标签
RT-Thread Studio
串口
LWIP
Env
SPI
Bootloader
AT
ART-Pi
Hardfault
CAN总线
FinSH
USB
文件系统
RT-Thread
DMA
SCons
线程
RT-Thread Nano
MQTT
STM32
RTC
FAL
ESP8266
rt-smart
WIZnet_W5500
ota在线升级
flash
cubemx
I2C
UART
packages_软件包
freemodbus
潘多拉开发板_Pandora
PWM
定时器
ADC
BSP
socket
中断
keil_MDK
编译报错
MicroPython
Debug
SDIO总线
GD32
ulog
C++_cpp
rt_mq_消息队列_msg_queue
flashDB
SFUD
本月问答贡献
Juggernaut
9
个答案
3
次被采纳
小小李sunny
9
个答案
2
次被采纳
xiaorui
18
个答案
1
次被采纳
靖哥哥我滴神
4
个答案
1
次被采纳
编程菜鸟
1
个答案
1
次被采纳
本月文章贡献
ThinkCode
2
篇文章
2
次点赞
Z_Y
1
篇文章
4
次点赞
小手凉凉
1
篇文章
2
次点赞
HAHABO
1
篇文章
1
次点赞
南霁云
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部