ZYNQ系列的实用奇葩操作(2)--PS-PL互联之从C语言指针开始理解AXI接口

  上篇文章讲了PS-PL互联的几个一直在用,但没什么存在感的接口。本篇文章开始讲最常用也是最重要的AXI接口。后面预计更新的使用仿真器操作PL端的寄存器、使用XVC实现虚拟仿真器、让PS端享受10G以太网等都需要对本章节有一定的了解。

    大家都知道在驱动和内核开发时,C语言相对其它编程语言要高人一等就是凭着C可以亲密接触底层的特性。要去抄底那就必须要用让新手和老手都落泪的指针。

   Let's go!先看下最丐版的指针操作:

    这个代码没什么好说的,ptr_test函数就是将一个指针对应的变量的值赋值成20。嗯,从C的角度看so easy。好,加大电流,看下它对应的汇编语言。(为啥要看汇编啊?要从ARM到FPGA打穿版,得一步一步来是不是).

  蓝色的r0 r2 r3 fp lr这些是ARM架构对应的寄存器(是的,你没猜错,就是和FPGA定义的reg 类型是一个意思)。从ARM角度不严谨的讲可以当成一个可以快速读取的变量。

  接下来我们看36-38行,其他代码是函数的出入栈,不用理它。 顺便再回忆一下危机原理里面讲的ARM几种寻址类型。

    第37行是立即数寻址,说人话就是把一个数赋值给一个寄存器,这里将r2寄存器的值设为了20。

    第38行是寄存器间接寻址,说人话就是r3寄存器里面保存了一个数,这个数是一个CPU可以访问的地址,然后将r2寄存器的值存到r3这个地址对应的位置。

   第36行是寄存器基址变址寻址(这是人说的话吗?),翻译一下就是说以一个寄存器为基础地址(这里是fp寄存器),偏移了8的位置存了一个数,然后将这个数赋值给r3。

  有点晕是不是?

    假设你是个狡猾的兔子,每个月你老婆会给你零花钱,剩下的呢你要存下来,然后你就在很多房间里藏了私房钱,每个房间里面藏的金额还不一样。你怕时间久了记不住,就拿了个小本本给每个房间编了号,把每个房间里面藏的金额记下来。

    这个月老婆直接给了你20块现钱,然后你马上找了个袋子(r2)装起来,这个就对应的 mov r2, #20,现金支付。现在需要存一部分,你翻了下小本本(fp),看看哪个房间安全点,发现小本本(fp)第8页记录了10号房间安全,并记在了脑子(r3)里,这个过程就对应 ldr r3, [fp, #-8]。等了一会儿,你老婆出门了,好的,机不可失。然后你马上用袋子(r2)把小钱钱藏到了你大脑(r3)记住的可以藏小钱钱的房间(10号房间),对应str r2, [r3]。为了防止穿帮,袋子放回原处,大脑忘记刚才存钱这回事(r2 r3可以去干其他事情了)。OK,操作完成。

    好了这篇文章到这里了,这篇文章的主要目的是去理解应用层操作底层的工作流程,尤其要理解CPU里对地址、数据的操作。不管你用什么高级语言写出来的,最终落实到CPU里都是地址+数据、算术运算、条件判断这几种基本操作。

    哎哎哎,砖头你字多你说的对,不过好像跟AXI总线没关系啊?

    少年别急啊,做技术不就是拼的谁更持久吗?ARM这些CPU也是可以用FPGA搭建出来的,你一直在应用层上晃,怎么去打通到FPGA的任督二脉呢?

公众号:嵌入通信的砖 不定时更新嵌入式技术

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值