您的位置:首页 > 其它

day05 UART实战、源码阅读工具(Sourceinsight/Ctags)、Makefile编写

2017-06-16 17:09 411 查看
回顾:

1.面试题:谈谈对UART串口的理解

  1.1.谈谈常见几种硬件通信方式

      GPIO/UART/I2C/SPI/1-Wire

  1.2.UART的定义

          九个字

          定义阐述

              串行

              并行

              串行和并行PK

              数据同步

                  异步

                       协议

                           UART协议

                  同步

                       时钟控制信号线

                       低放高取

                       务必画出示意图

            收发器

  1.3.UART的三种工作方式

      单工/半双工/全双工(TX,RX)

  1.4.回归:何为异步问题?

      必须讲UART协议,引出UART协议

      大谈特谈UART协议

      1.UART协议相关的概念

        空闲位/起始位/数据位/奇偶校验位/停止位/波特率

      2.具体传输过程,一定要举例子说明,并且边说边画时序图

        例如:5=0101 A=1010

        UART传输数据0xAA,115200,8o1

      3.示波器抓波形并且能够看懂分析波形

       

  1.5.实战:上位机和下位机通过UART数据传输为例

      谈谈整个开发的流程(顺便自己说出面试题的

      题目:说说ARM裸板编程如何实施)

      1.分析用户需求

        下位机循环给上位机发送一个字符串

      2.掌控下位机UART的硬件信息

        粗看

            位置

        细看

            原理图

               画出一个最终的UART硬件连接示意图和硬件访问操作示意图

               根据硬件操作图得到结论:

               CPU核以软件地址指针的形式访问UART控制器

               内部的一堆寄存器,本质就是CPU核给UART

               控制器发送命令

                

               UART控制器根据命令硬件上自动操作TX和RX

               间接访问外设

                

               最终的研究对象就是UART控制器以及内部的

               一大堆寄存器

            

            芯片手册

                S5P6818芯片手册的UART控制器相关的章节

                6/FIFO模式/NON-FIFO模式/UART控制内部操作特性:    

                 64字节    1字节      发送器

                                                                     ...

                                                             接收器

                                                                     ...

              仔细研读UART控制器相关寄存器:

                      重点关注:

                          寄存器的基地址

                          寄存器的BIT含义

       3.根据掌握的硬件信息编写ARM裸板程序

         编写之前,交代一下ARM裸板编程的框架

 

2.windows和linux系统源码阅读工具

  windows源码阅读工具:sourceinsight

  使用操作如下:

  1.获取安装包:ftp://ARM/sourceinsight3.5.rar

  2.windows下解压缩,安装软件

  3.利用sourceinsight创建源码阅读工程

    打开sourceinsight软件->Project->New Project

    ->工程名称:UART

      工程保存路径:一般保存放到源码目录下

    ->OK->OK->将“Show only ...”前面的勾去掉

    ->Add All->有可能会出现一个对话框,将对话框

    的两个勾都选中!

    ->Close

    再次点击Project->Sync...->OK

    支持UART源码阅读工程创建完毕!

     

    sourceinsight解决中文乱码问题:

    1.用记事本打开要阅读的文件

    2.点击另存为,指定一下选项:

      只需将编码:UTF-8修改为ANSI

      保存退出

    3.sourceinsight会提示是否需要更新,点击YES即可

     

    sourceinsight基本用法:

    右键可以跳转到宏,变量,函数的定义地方

    点击"<-"可以进行返回

    点击"R"可以进行搜索

     

    linux系统下使用sourceinsight软件:

    1.安装wine模拟器

      sudo apt-get install wine

    2.用wine启动sourceinsight

      wine  sourceinsight.exe //启动sourceinsight.exe安装程序

              

  linux源码阅读工具:ctags

    1.安装linux源码阅读神器

      sudo apt-get install ctags

    2.用ctags创建源码阅读工程

      cd /opt/arm/day05/1.0  //进入源码目录

      ctags -R * //即可创建工程

      ls

              tags //生成的源码工程文件

      ctags使用的快捷键:

      vim main.c  

          将光标移动到要查看的变量或者宏或者函数上面

          按ctrl+]进行跳转

          按ctrl+o进行返回

          

    3.务必掌握另个关键命令     

      grep "uart_init"  * -Rn        

      find . -name main.c

 

4.编写UART裸板程序

  参考代码:ftp://ARM/day04.rar/uart

   不加'\r'效果:

    hello,world

                         hello,world

                                              hello,world   

       ‘\n’:换行

       '\r': 回车                                 

  上位机操作过程:

  mkdir /opt/arm/day05/1.0 -p

  cd /opt/arm/day05/1.0

  vim uart.h

  vim uart.c

  vim main.c

  arm-cortex_a9-linux-gnueabi-gcc -nostdlib -c -o uart.o uart.c

  arm-cortex_a9-linux-gnueabi-gcc -nostdlib -c -o main.o main.c

  arm-cortex_a9-linux-gnueabi-ld -nostartfiles -nostdlib

                  -Ttext=0x48000000 -o uart.elf main.o uart.o

  arm-cortex_a9-linux-gnueabi-objcopy -O binary uart.elf uart.bin

  cp uart.bin /tftpboot

  arm-cortex_a9-linux-gnueabi-objdump -D uart.elf > uart.dis

  vim uart.dis //确保main入口函数对应的地址为0x48000000

   

  下位机测试:

  进入uboot命令行模式执行:

  ping 192.168.1.8

  tftp 48000000 uart.bin

  go 48000000

  观察上位机的串口工具是否有"hello,world"打印信息

 

案例:上位机给下位机发送字符串信息,并且下位机

      将上位机发送的字符串再返回到上位机打印显示

实施步骤:

上位机执行:

cp /opt/arm/day05/1.0 /opt/arm/day05/2.0 -fr

cd /opt/arm/day05/2.0

vim uart.h

vim uart.c

vim main.c

arm-cortex_a9-linux-gnueabi-gcc -nostdlib -c -o uart.o uart.c

  arm-cortex_a9-linux-gnueabi-gcc -nostdlib -c -o main.o main.c

  arm-cortex_a9-linux-gnueabi-ld -nostartfiles -nostdlib

                  -Ttext=0x48000000 -o uart.elf main.o uart.o

  arm-cortex_a9-linux-gnueabi-objcopy -O binary uart.elf uart.bin

  cp uart.bin /tftpboot

  arm-cortex_a9-linux-gnueabi-objdump -D uart.elf > uart.dis

  vim uart.dis //确保main入口函数对应的地址为0x48000000

   

  下位机测试:

  进入uboot命令行模式执行:

  ping 192.168.1.8

  tftp 48000000 uart.bin

  go 48000000  

  上位机串口终端会看到一个提示符:

  Shell#

   

5.案例:上位机给下位机发送开关灯(蜂鸣器)命令

  例如:

  Shell#led on

  Shell#led off

  Shell#beep on

  Shell#beep off

实施步骤:

cp /opt/arm/day05/2.0 /opt/arm/day05/3.0 -fr

cd /opt/arm/day05/3.0  

vim led.h

vim led.c  

vim main.c

vim strcmp.h

vim strcmp.c

arm...gcc -nostdlib -c -o led.o led.c

arm...gcc -nostdlib -c -o main.o main.c

arm...gcc -nostdlib -c -o strcmp.o strcmp.c

arm...ld -nostartfiles -nostdlib -Ttext=0x48000000

            -o shell.elf main.o led.o uart.o strcmp.o

arm...objcopy -O binary shell.elf shell.bin

cp shell.bin /tftpboot

 

下位机测试:

ping 192.168.1.8

tftp 48000000 shell.bin

go 48000000

  Shell#led on //给下位机发送开灯命令

  Shell#led off //给下位机发送关灯命令

   

6.优化shell程序的编译

  思考:目前代码的编译是否简便呢?

  代码编译需要Makefile即可编译简便!

  学习Makefile的文档:<<跟我一起学习Makefile>>

  回顾:Makefile的基本语法

      目标:依赖

      (TAB键)命令

      参考代码:day05/4.0/

                day05/5.0/

                day05/6.0/

                day05/7.0/

      补充:

      %.o:%.c:将所有的.c文件生成对应的.o文件

      $@:目标

      $<:依赖

  shell裸板程序对应的Makefile:day05/8.0

   

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: