分析了一下 align 的用法

ROI-Align 原理理解 -----   对背景问题的理解  ----- 之前一直在想一个问题:一个Label在原图上标记出一个包含目标的区域。这个框在特征提取后,大小被缩小到了什么程度? 如果这个label框本身就不大,那么经过几层池化之后,是不是在最后的feature map上都没有一个位置,能够对应到这个区域? 目标在特征提取过程中,由于这种深度结构导致目标被【腐蚀】或者说该目标的特征被淹没。 这个问题更广义... 阅读详情

 之前看bootloader的时候总是搞的不太懂,今天下定决心分析一下这个 align究竟是怎么回事。一下分多种情况

平台: WinXP + WinARM ,WinARM是window平台的 ARM-LINUX-GCC 的移植版本。

 

.align 就是用来对齐的,究竟怎么对齐,有啥情况?下面分析一下

(一)

 

_start:
    b reset
    .byte 0x55
    .byte 0xaa
reset:
    ldr r0, =0x53000000
    ...
 

这样的话编译器会报错

crt0.S: Assembler messages:

crt0.S:10: Error: misaligned branch destination

make: *** [leds.bin] Error 1

 

很明显,提示边界对齐出错,为什么这样的呢?我们分析一下。首先,ARM指令都是32位的,这里要求4字节(一个word)对齐,b reset 指令占了4个字节,接着我们用 .byte 指令定义2个常数,因为这里是 byte 类型,所以只占了八位,两个数据,一共占16位。由于连接器内部有一个程序地址计数指针,里面保存着当前的地址,这地址指针是连接器内部工作需要的,我们不需要理会,只需要了解有这么一个机制。假如_start从0x00,第一条指令占4个byte,然后连续分配2个byte,当前地址指针应该是 0x06,那么问题来了,下条指令,也就是标号 reset 处的ldr指令,是一条ARM指令,这要求是 4个字节对齐的,当前的地址为 0x06,并不能满足这个要求,所以编译器报错了。

 

解决办法很简单,我们只需要加一条 .align 指令,问题就解决了

_start:
    b reset
    .byte 0x55
    .byte 0xaa
    .align
reset:
    ldr r0, =0x53000000
 

 

编译结果是:

00000000 <_start>:
   0: ea000000  b 8 <reset>
   4: 0000aa55  andeq sl, r0, r5, asr sl

00000008 <reset>:
   8: e3a00453  mov r0, #1392508928 ; 0x53000000

 

在两个 .byte 指令后自动补零,直到满足地址要求为止。这里就是将地址累加到 0x08符合ARM指令要求,所以在这里写入下条指令。这是基本内容,下面研究一下其他

 

(二).align 5

这里只是一个例子,重点想说的是 这个 .align 5 后面的 5 究竟是什么意思? uboot里面就有这指令。我们继续做做试验,看看编译结果是什么

 

_start:
    b reset
   
    .align 5
    .byte 0x55
   
    .align 5
    .byte 0xaa
   
    .align
reset:
    ldr r0, =0x53000000
 

编译结果:

00000000 <_start>:
   0: ea00000f  b 44 <reset>
 ...
  20: 00000055  andeq r0, r0, r5, asr r0
 ...
  40: 000000aa  andeq r0, r0, sl, lsr #1

00000044 <reset>:
  44: e3a00453  mov r0, #1392508928 ; 0x53000000

我们发现这编译结果有点意思,这地址分配一下子上去了,但是也不难,分析一下就OK,看那个 20 和 40 ,这里是十六进制,也就是 32 和 64了。那么很容易可以联想到,这里做的是幂运算,也就是 .align 5 对齐的地址为 2^5 = 32,之前的地址全部补零。

(三).balignl 16,0xdeadbeef

_start:
    b reset
   
    .balignl 16,0xdeadbeef
   
reset:
    ldr r0, =0x53000000
 

在看uboot的时候还有这么一个语句,查了半天as的手册才找到,囧,不过稍微做了一下实现,觉得又不是很难,我们看看结果:

00000000 <_start>:
   0: ea000002  b 10 <reset>
   4: deadbeef  cdple 14, 10, cr11, cr13, cr15, {7}
   8: deadbeef  cdple 14, 10, cr11, cr13, cr15, {7}
   c: deadbeef  cdple 14, 10, cr11, cr13, cr15, {7}

00000010 <reset>:
  10: e3a00453  mov r0, #1392508928 ; 0x53000000

可以看出,这指令就是将 deadbeef字符串填进去,一共填到地址为16对齐的地方为指,上面可以看到,这里填到 0x10 也就是 16了。

 

在Window上安装和配置VTK9.x,并在QT项目中调试VTK是否可用 VTK+MSVC+Qt Creator + CMake配置 阅读详情

相关推荐

Altium Designer 21 DRC检查:从新手到高手,这10个常见错误你踩过几个?

本文详细解析Altium Designer 21 DRC检查中的10个高频错误,包括间距违规、线宽违规、未连接网络等常见问题,并提供精准修复方案和实战技巧。通过分层诊断、智能规则设置和三维排查等方法,帮助工程师从新手进阶为高手,提升PCB设计效率和质量。

weixin_26873711的博客 221

ARM汇编指令:.align理解和用法

先看以下代码:     mov r1,r0     mov r0,#12     ldr r4,str1     ldr r3, =str1     ldr r5,str     ldr r6,=str     ldr r7,str str1:     .word 7777 str:     .word 0x33f80000     .byte 0x88

清闲老窝的专栏 2万+

InsightFace实战:如何在树莓派上部署轻量级人脸识别系统(附完整代码)

本文详细介绍了如何在树莓派上部署基于InsightFace框架的轻量级人脸识别系统。通过硬件选型、环境配置、模型优化(如MobileFaceNet)及完整代码实战,指导开发者构建本地化、低功耗的智能应用,如智能门铃,并提供了性能调优与系统服务化的进阶技巧。

weixin_29043895的博客 349

linux kernel的异常量表介绍(irq,fiq,swi,svc...)

armv8-arch64架构下,linux kernel的异常量表,再entry.S中: /* * Exception vectors. */ .align 11 ENTRY(vectors) kernel_ventry 1, sync_invalid // Synchronous EL1t kernel_ventry 1, irq_invalid // IRQ EL1t kernel_ventry 1, fiq_invalid // FIQ EL1t kernel_ventry

baron-周贺贺-代码改变世界ctw 3421

STK与Matlab连接报错?手把手教你解决mexConnect函数执行问题(附完整避坑指南)

本文针对STK与Matlab连接时常见的“mexConnect函数执行”报错,提供了完整的诊断与解决方案。文章深入剖析了错误根源在于路径冲突或文件损坏,并手把手指导用户通过定位STK连接器文件、正确配置Matlab路径(包括使用addpath命令)以及执行初始化测试三步走策略,彻底解决问题。同时附上版本兼容性检查、安装避坑指南及构建稳健工作流的建议,帮助用户建立可靠的STK-Matlab联合仿真环境。

yolo5detector的博客 472

AUTOSAR E2E Protocol实战:Profile1到Profile5的配置差异与最佳实践

本文深入解析AUTOSAR E2E Protocol中Profile1到Profile5的核心配置差异与适用场景。针对经典CAN、CAN FD及以太网等不同总线,详细对比了计数器、CRC、DataID等关键参数,并结合实战代码与配置示例,为工程师根据功能安全等级、数据长度与带宽限制选择最佳Profile提供了清晰的选型路径与工程实践指南。

milk5的博客 938

Linux align函数,linux内核中ALIGN解析(示例代码)

1. 在linux内核中,经产会看到对齐ALIGN的调用,常见的如内存管理中page对齐,net_device中私有数据的获取等,本文是对ALIGN宏的一个简单分析。1.1. 内核调用:在e100.c中,网卡irq处理函数 irqreturn_t e100_intr(int irq, void *dev_id) 调用netdev_priv(netdev)处理函数获取net_device的私有数据。...

weixin_30246273的博客 2034

炉石传说游戏系统拆解和部分系统分析

一.游戏综述 《炉石传说:魔兽英雄传》是一款由暴雪娱乐公司出品的策略类卡牌游戏。中国大陆地区的独家运营由网易公司代理。2014年3月13日全球同步正式运营。游戏背景设定于暴雪的魔兽系列,共十位魔兽中的角色作为十种不同的职业。而玩家要做的,就是根据己方现有的卡牌组建合适的卡组,指挥英雄,驱动随从,施展法术,与游戏好友或素不相识的对手一决高下。 二.游戏系统拆解图 三.游戏系统部分分析 1. 对战系统 (1)战斗准备 炉石传说开始前都需要配置至少30张卡牌作为出战卡组 .....

Jimmy72236的博客 4919

strict align 的含义

在有些处理器上,如果在非对齐地址上存取一个一个值,可能会出“对齐异常”。 比如,4字节的int型一般都要在能被4整除的地址上存取;2字节的short型在偶数地址上被存取。 gcc有编译选项可以让用户指明代码将要运行的主机是严格对齐的、还是支持非对齐操作。 这个选项就是 -mstrict-align 或 -mono-strict-align。 这是测试代码: struct tt {

Dai Yuwen的专栏 4117

电力系统设计实战:如何用ETAP绘制一次接线图并优化供电方案

本文详细介绍了如何使用ETAP软件进行电力系统一次接线图的绘制与供电方案优化。从基础环境配置到主接线拓扑构建,再到典型接线方式的对比分析与智能优化,为工业与民用电力系统设计提供实用指南。通过ETAP的可靠性分析和动态仿真功能,帮助工程师选择最优供电方案,提升系统可靠性和运维效率。

weixin_29250573的博客 203

使用FileZilla在武汉大学IGS数据分析中心下载GNSS数据

2.依次点击如下图标下载到本地并解压安装(按系统选择要下载的版本)

qq_43381998的博客 6035

BootLoader这个玩意

有了前面的概念和源码描述,这里进行最后的总结。1)初始化看门狗。2)初始化时钟。3)初始化串口。4)设置CPU模式的栈指针,进入SVC模式。5)初始化RAM。6)初始化MMC控制器,并将内核映像从MMC设备中读到0x48000000处的RAM地址中。7)清除BSS段。8)做好调用内核前的准备工作。9)跳转到RAM中的内核的第一条指令,引导过程完成。(SVC和SYS的区别知道吗?我们在UBoot的内容学习过)

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 5546

rk3568 rk628桥片hdmi转lvds

RK628 是瑞芯微全新推出的视频桥接芯片,支持丰富的显示接口,支持高分辨率大屏产品转换需求。基于DRM、FB的显示框架易于使用。 输入信号支持:HDMI、RGB、BT.1120,输出信号支持 HDMI、GVI、Dual LVDS、Dual MIPI、MIPI-CSI、RGB、BT.1120,最高支持4K 60fps 输入/输出转换,并且支持输入到输出 1/4~4倍的缩放。

weixin_35723192的博客 1129

【转载】.align用法分析

【转自】http://blogold.chinaunix.net/u3/107770/showart_2119484.html今决定认真分析一下u-boot的代码,但一开始就被“.balignl 16 0xdeadbeef”这条语句难住了,还好,google了一下,找到了《分析了一下 align 的用法》这篇文章,作者写得很好,看完后,我根据自己的实验结果,做了适当的更改,以让自己看起来更明白,把它记录如下:.align 就是用来对齐的,究竟怎么对齐,有啥情况?下面分析一下(一)$vim align1.s在

Nobel2313的专栏 935

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

align 的用法(u-boot源代码分析)

今决定认真分析一下u-boot的代码,但一开始就被“.balignl 16 0xdeadbeef”这条语句难住了,还好,google了一下,找到了《分析了一下 align 的用法》这篇文章,作者写得很好,看完后,我根据自己的实验结果,做了适当的更改,以让自己看起来更明白,把它记录如下: .align 就是用来对齐的,究竟怎么对齐,有啥情况?下面分析一下 (一) $vim align1...

weixin_34304013的博客 311

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

2.2 vc-align源码分析 -- ant-design-vue系列

ant-design-vue源码分析系列,本章是vc-align源码分析,作用是元素对齐。

weixin_44438233的博客 2682

flex布局

flex布局1、flex布局模型2、flex相关的属性3、应用在flex container上的css属性3.1 flex-flow3.2 flex-direction3.3 justify-content3.4 align-items3.5 flex-wrap3.6 align-content4、应用在flex items上的css属性4.1 order4.2 align-self4.3 flex-grow4.4 flex-shrink4.5 flex-basis4.6 flex4、关于align-ite

lscheng的博客 893

mysql toolkit 用法[备忘]

mysql toolkit 是一个小插件,用于对数据库进行监控,分析的小工具, 通常都是调用 perl 对当前的环境,数据库进行分析,比对,值得学习一下。

Terry Tsang 5033

使用Web标准建站第8天:CSS布局入门

CSS布局与传统表格(table)布局最大的区别在于:原来的定位都是采用表格,通过表格的间距或者用无色透明的GIF图片来控制文布局版块的间距;而现在则采用层(div)来定位,通过层的margin,padding,border等属性来控制版块的间距。1.定义DIV分析一个典型的定义div例子:#sample{ MARGIN: 10px 10px 10px 10px;PADDING:20px 10px

YICK BLOG 1286

flex(弹性盒子)相关问题

flex(弹性盒子)相关问题: 目的:主要分清楚flex-flow 和 align-items 的用法; 1、 完整代码实现 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Doc

weixin_44694201的博客 357

css之 vertical-align用法详解

vertical-align 属性设置元素的垂直对齐方式。 css中的vertical-align 属性只能用于 行内元素 和 置换元素(例如 图像和表单输入框) ,此属性不继承。 接下来我们用例子去分析这些值的意思及产生的效果: 首先我们先看一张图,文字的顶线、中线、基线,基线是字母x的下边缘 默认例子 <style> * { margin: 0; padding: 0; } div { width: 200px; line-height: 60

平平无奇小码农的博客 3万+

常用文本属性

1、由于字体设计原因,文字最终呈现的大小并不一定与font-size的值一致,可能大,也可能小。注:由于字体设计原因,文字在一行中,并不是绝对垂直居中,若一行中都是文字,不会太影响观感。注:由于字体设计原因,靠上述办法实现的居中,并不是绝对的垂直居中,但如果一行中都是文。(1)line-height 过小--文字产生重叠,且最小值是0,不能为负数,(2)line-height 是可以继承的,且为了能更好的呈现文字,最好写数值。(3)line-height 和 height 的关系?

weixin_52874247的博客 125

CSS3部分知识点

1. display:flex https://blog.youkuaiyun.com/w390058785/article/details/83543198 https://www.runoob.com/w3cnote/flex-grammar.html https://www.cnblogs.com/dodocie/p/7058493.html 2.CSS3 box-sizing 属性 定义和...

thaiilk的博客 232

Flex布局

传统布局与Flex布局的差异主要体现在兼容性和灵活性上。传统布局在PC端兼容性更好,但移动端布局繁琐;Flex布局在移动端应用广泛,操作简便但PC端兼容性较差(特别是IE11及以下版本)。来启用,子元素自动成为Flex项目。允许单个项目有与其他项目不一样的对齐方式,覆盖。控制多行项目的侧轴对齐方式,属性值与。定义项目的排列顺序,数值越小越靠前。Flex布局通过设置父容器为。属性在Flex布局中失效。

2601_95077928的博客 315

微信小程序控件

1 scrollview 窗口view的滑动 <scroll-view scroll-y class='scroll-view-y' bindscrolltoupper="upper" bindscrolltolower="lower" bindscroll="scroll" scroll-top="{{scrolltop}}"> <view id="gr...

weixin_30299709的博客 472
上一篇: uboot分析之u-boot.lds
下一篇: u-boot中代码的疑问(_armboot_start与_start?)
lemon_fantasy
博客等级 码龄18年 38粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值