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
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
- day05 UART实战、源码阅读工具(Sourceinsight/Ctags)、Makefile编写
- Linux下源码阅读工具ctags+vim中安装ctags
- 代码阅读工具SourceInsight
- 源码阅读SourceInsight
- vi+ctags阅读源码
- vi+ctags 阅读源码
- vi+ctags阅读源码
- Linux操作系统下源码阅读工具ctags+vim
- vim+ctags+cscope 打造Android源码阅读工具
- vim+ctags+cscope 打造Android源码阅读工具
- vim+ctags+cscope 打造Android源码阅读工具
- Linux下源码阅读工具ctags的安装及使用
- Linux 下阅读源码工具(Vim + ctags+Cscope)
- 利用sourceInsight阅读TensorFlow源码
- Linux操作系统下源码阅读工具ctags+vim中ctags的安装
- Linux操作系统下源码阅读工具ctags+vim中ctags的安装
- Linux操作系统下源码阅读工具ctags+vim中ctags的安装
- 阅读内核源码 VIM+Ctags
- 自定义View总结(一)
- 自顶向下深入分析Netty(八)--CodecHandler
- 如何去掉debug是讨厌的错误提示对话框
- 记一次踩坑|空table应该编码为数组还是对象
- day03 LED灯源程序编写与编译、UART原理
- day05 UART实战、源码阅读工具(Sourceinsight/Ctags)、Makefile编写
- day04 UART协议
- 高效能人士的七个习惯总结
- Java去除一个Map中value值最小的K个记录
- 高PowerSurfacing RE v2.4-4.1 for SolidWorks 2012-2017 Win64 6CD
- C/C++ pthread_cond_timedwait()函数使用心得
- day06 链接脚本、shell程序优化、IIC总线
- 阿里云数加产品家族图首次亮相
- LintCode 431 Connected Component in Undirected Graph