uTenux——重新整理底层驱动库
重新整理底层驱动库
1、 整理chip.h
在chip.h文件中的07----13的宏定义设置位如下,这样我们就不用在工程配中定义sam3s4c这个宏了,为我们以后通用少了一件麻烦事。
//#if defined sam3s4
//#elif defined sam3s2
//#elif defined sam3s1
//#else
// #warning Library does not support the specified chip, specifying sam3s4.
#define sam3s4
//#endif
2、 看着common文件夹有些乱,而且像USB什么的文件夹我们也不常用到,所以我就只留下了最常用的三个startup、chip、peripheral。这三个文件夹在我们应用时,必然会用到,所以,我就把这三个单独拿出来作为我的common文件夹,供我以后使用,另外把common中的那些零杂文件放入startup文件加下,因为那些文件是关于底层驱动配置的,具体如下:
├─Library
│ ├─cmsis
│ ├─include
│ ├─source
│ └─startup
└─Peripherals
├─include
└─source
这些都是个人习惯,如果您了解了文件的组织结构,可以按照自己的习惯进行组织。我只是习惯性的沿用了之前STM32开发时的组织习惯而已。
3、 建立工程模板。建立工程模板的目的是位了每次建立新的工程时简化每次都要做的一些繁琐的操作。我建立的工程模板的文件组织结构如下:
├─Configure
├─Interrupt
├─List
├─Note
├─Obj
└─Source
├─APP
└─HAL
其中Configure文件夹中包含了board.h和chip.h文件,我们可以配置两个文件中包含的外设模块的包含与否。Interrupt文件夹中有Interrupt.c和Interrupt.h两个文件,这两个文件负载处理器的中断函数编写。List文件用于存放编译后的连接文件,OBJ文件夹用于存放编译后的目标文件,这连个文件夹可以用批处理清理,我自己写了一个批处理文件,并将其转化位了可执行文件,位于Note文件夹下,用于可以用它清除编译后产生的目标文件(注意Clear.exe只能存放于该文件夹下),另外Note文件加下还有Note.txt文件,用于存放记录工程的编写记录介绍及版本等。最后便是source文件夹了,这个文件夹内由main.c文件和APP与HAL文件夹,其中APP用于存放用于编写的硬件驱动程序*.c,HAL文件夹用于存放对应的*.h文件,由于函数、变量的声明。
4、 经过以上整理后,便可以建立工程了,接下来介绍工程建立后的相关工程设置。
首先器件的选择应该不成问题,接着是目标文件输出文件夹的选取,这里就选Obj文件夹,List文件输出文件夹选择List文件夹。接着是C编译器设置,我们要设置编译器的包含路径,在include项中添加目录:..\\_Common\Library; .. \_Common\Peripherals; ..\ Configure; .. \Interrupt; .. \Source\HAL; OK,要包含的路径就这些了,他们分别是处理器驱动库,开发板外设驱动库,配置文件,中断服务函数,用户外设驱动函数。还有就是Link配置,因为我们要用到板载的NandFlash,所以我们要从新定义Flash,我们要取消默认user memory layout from Target dialog选项,并在下面scatter File中选择..\_Common\Library\startup\flash.sct。最后就是仿真器的配置了,由于不同仿真其的配置略有不同,本人用的是J-Link,这里就不做详细的解说了。
这一节就至此结束了。谢谢您的阅读,希望您能够留下宝贵的意见建议,谢谢!
uTenux——重新整理底层驱动库的更多相关文章
- uTenux——软件底层驱动组织结构介绍
经过第一节对uTenux初步认识和第二节对uTenux\AT91SAM3S4C开发板的硬件结构的介绍,这一节我们将要学习的是uTenux\AT91SAM3S4C的软件底层驱动. 在悠龙公司的官网或者u ...
- Android驱动入门-Led控制+app+ndk库+底层驱动
硬件平台: FriendlyARM Tiny4412 Cortex-A9 操作系统: UBUNTU 14.04 LTS 时间:2016-09-20 21:56:48 本次实验使用的是 安卓APP + ...
- YARN底层基础库
YARN基础库是其他一切模块的基础,它的设计直接决定了YARN的稳定性和扩展性,YARN借用了MRV1的一些底层基础库,比如RPC库等,但因为引入了很多新的软件设计方式,所以它的基础库更多,包括直 ...
- HAL驱动库学习-ADC
如何使用ADC驱动库 1 实现如下两个函数 a: HAL_ADC_MspInit()使能ADC时钟,设置时钟源, 使能ADC Pin,设置为输入模式,可选 DMA,中断 b:HAL_ ...
- Linux系统调用怎么和内核或底层驱动交互的
学习Linux系统下驱动程序开发已有大半年时间,心中一直有个疑惑:那就是诸如open.write.read等系统调用是怎么和内核或底层驱动建立起联系的呢?今天将自己的一些粗略的理解总结如下. ...
- Android底层驱动开发(一)
1 Android为什么要增加硬件抽象层HAL A 统一硬件调用接口.所以利用HAL屏蔽linux驱动的复杂不统一的接口 B 解决GPL版权问题,因为linux内核基于GPL协议.这个G ...
- Python底层socket库
Python底层socket库将Unix关于网络通信的系统调用对象化处理,是底层函数的高级封装,socket()函数返回一个套接字,它的方法实现了各种套接字系统调用.read与write与Python ...
- springboot~maven制作底层公用库
把一些公用方法,类型抽象到一个项目里,让其它项目依赖它,这种设计是一种解耦的体现,其实像springboot就是我们的一种依赖,他里面有很多子模块,用到哪个就添加哪个依赖即可,像redis,mongo ...
- 【RL-TCPnet网络教程】第6章 RL-TCPnet底层驱动说明
第6章 RL-TCPnet底层驱动说明 本章节为大家讲解RL-TCPnet的底层驱动,主要是STM32自带MAC的驱动实现和PHY的驱动实现. 6.1 初学者重要提示 6.2 KEI ...
随机推荐
- ie6双边距解决
这个bug是ie6有名的双边距bug:同时为一个元素设置向一个方向偏移和对这个方向进行外边距设置,比如float:left,margin-left:45px;在其他浏览器下是显示正常的,在ie6下这个 ...
- 《zw版·Halcon-delphi系列原创教程》航母舰载机·视觉定位标志的识别代码
<zw版·Halcon-delphi系列原创教程>航母舰载机·视觉定位标志的识别代码 航母舰载机机身上的黄黑圆圈的标志是什么意思,辐射?核动力?战术核弹? <百度百科>介绍如下 ...
- Openstack的的nova list命令
nova list用于在shell交互模式下查看当前用户存在的实例数目,但是这里仍然要注意的地方: 没有参数的nova list [root@node-5 newstest-master]# nova ...
- 解决Android SDK Manager更新下载速度慢
1.在Host文件加上 203.208.46.146 www.google.com 74.125.113.121 developer.android.com 203.208.46.146 dl.goo ...
- [转]Delphi多线程编程入门(二)——通过调用API实现多线程
以下是一篇很值得看的关于Delphi多线程编程的文章,内容很全面,建议收藏. 一.入门 ㈠. function CreateThread( lpThreadAttributes: Pointer ...
- 161117、使用spring声明式事务抛出 identifier of an instance of
今天项目组有成员使用spring声明式事务出现下面异常,这里跟大家分享学习下. 异常信息: org.springframework.orm.hibernate3.HibernateSystemExce ...
- 160826、浏览器渲染页面过程描述,DOM编程技巧以及重排和重绘
一.浏览器渲染页过程描述 1.浏览器解析html源码,然后创建一个DOM树. 在DOM树中,每一个HTML标签都有一个对应的节点(元素节点),并且每一个文本也都有一个对应的节点(文本节点). DO ...
- linux源码Makefile详解(完整)【转】
转自:http://www.cnblogs.com/Daniel-G/p/3286614.html 随着 Linux 操作系统的广泛应用,特别是 Linux 在嵌入式领域的发展,越来越多的人开始投身到 ...
- 《图解TCP/IP》
MAC寻址:地址转发表:IP寻址:路由控制表. 网卡(网络接口卡),NIC. 循环复用DNS技术. 代理服务器是一种应用网关.防火墙. LLC是Logical Link Control的缩写,意为:逻 ...
- ArrayList集合的实现原理
一. ArrayList概述: ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存. ArrayList不是线程安全的,只能用在单线程环境 ...