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

来源:互联网 发布:腾讯红包大数据,归属地 编辑:程序博客网 时间:2024/06/05 08:02
回顾:
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
   
 
阅读全文
0 0