一、前言

Many Tiva devices have portions of the peripheral driver library stored in an on-chip ROM. By using the code in the on-chip ROM, more flash is available for use by the application. The boot loader is also contained within the ROM, which can be called by an application in order to start a firmware update.

TM4C123的ROM中有peripheral driver library 和bootloader 。peripheral driver library 中存储了部分函数的实现源码以实现功能。
调用ROM中的函数可以节省flash空间。

对内存及指针定义的了解有助于深入理解编程:
关于TM4C123ROM中函数指针映射的说明,参看文章TivaWare函数指针在ROM中的映射
关于内存及寄存器地址的说明,参看文章内存及寄存器地址说明

二、调用方式

调用ROM中的函数有两种方式,直接调用和映射调用
1.Direct ROM Calls

  1. define preprocessor symbol
    可以在源码中定义或是在工程中通过预编译宏定义设置
    例:#define TARGET_IS_TM4C123_RA1
  2. #include “driverlib/rom.h”
  3. 代码中调用函数
 #define TARGET_IS_TM4C123_RA1
#include "driverlib/rom.h"
#include "driverlib/systick.h"
int
main(void)
{
ROM_SysTickPeriodSet(0x1000);
ROM_SysTickEnable();
// ...
}

2.Mapped ROM Calls
When code is intended to be shared between projects, and some of the projects run on devices with a ROM and some run on devices without a ROM, it is convenient to have the code automatically call the ROM or the flash version of the API without having #ifdef-s in the code. rom_map.h
provides an automatic mapping feature for accessing the ROM. Similar to the ROM_Function() APIs provided by rom.h, a set of MAP_Function() APIs are provided. If the function is available in ROM, MAP_Function() simply calls ROM_Function(); otherwise it calls Function().
ROM映射调用主要是考虑到代码的移植性。有的处理器可能没有相应的ROM函数库,如果使用ROM版本的函数调用,则编译时会出错。
rom_map.h 进行了#ifdef-s 定义,如下例所示:

#ifdef ROM_TimerRTCDisable
#define MAP_TimerRTCDisable                                                   \ROM_TimerRTCDisable
#else
#define MAP_TimerRTCDisable                                                   \TimerRTCDisable
#endif

当有ROM版本定义时,MAP_xx为ROM版的别名,否则为普通版的别名。
则代码中统一使用MAP_ xx 即可保证代码的移值性。

#include "driverlib/rom.h"
#include "driverlib/rom_map.h"
#include "driverlib/systick.h"
void
SetupSysTick(void)
{
MAP_SysTickPeriodSet(0x1000);
Map_SysTickEnable();
}

该代码在编译时即会处理,也起到了调用ROM中函数以节约内存的作用。同时有更灵活的移植性。

TM4C123-使用ROM中的函数库相关推荐

  1. python中math函数库矩阵_Python中矩阵库Numpy基本操作详解

    NumPy是一个关于矩阵运算的库,熟悉Matlab的都应该清楚,这个库就是让python能够进行矩阵话的操作,而不用去写循环操作. 下面对numpy中的操作进行总结. numpy包含两种基本的数据类型 ...

  2. lua中table函数库

    一部分的table函数只对其数组部分产生影响, 而另一部分则对整个table均产生影响. 下面会分开说明. table.concat(table, sep,  start, end) concat是c ...

  3. 【Android FFMPEG 开发】FFMPEG 交叉编译配置 ( 下载 | 配置脚本 | 输出路径 | 函数库配置 | 程序配置 | 组件配置 | 编码解码配置 | 交叉编译配置 | 最终脚本 )

    文章目录 一.FFMPEG 源码下载 解压 二.交叉编译工具 三.configure 脚本及帮助命令 四.配置 configure 脚本 五.输出目录配置 六.函数库配置 七.程序配置选项 八.组件配 ...

  4. python3.7安装numpy库_python2.7/3.7安装NumPy函数库的一种方法及小心得

    前提:python2.7以及对应的pip(python包管理工具,32/64位)已在win7上安装(安装地址:d:\python27). 在python官网上下载对应版本的NumPy函数库,下载到:d ...

  5. php中unset函数是在哪一章_php函数可以分为哪三种

    1.变量函数 变量函数又叫可变函数,php脚本在执行中会寻找与变量的值同名的函数并且去执行它,这样的好处是可以将不同的函数名称赋值给同一个变量,赋给变量那个函数名,在程序中使用变量名加上圆括号就调用那 ...

  6. php中的ltrim,PHP中ltrim()函数的用法与实例讲解

    PHP中ltrim()函数的用法与实例讲解 PHP ltrim() 函数 实例 移除字符串左侧的字符: $str = "Hello World!"; echo $str . &qu ...

  7. shell 函数 与 函数库

    目录 前言 一.shell 函数 1.1 Shell函数定义 1.2 函数返回值 1.3 函数参数传值 1.4 函数变量生命周期 1.5 函数中可以调用函数 二.函数之递归 2.1 阶乘 2.2 遍历 ...

  8. 动态加载的函数库Dynamically Loaded (DL) Libraries

    动态加载的函数库Dynamically loaded (DL) libraries是一类函数库,它可以在程序运行过程中的任何时间加载.它们特别适合在函数中加载一些模块和plugin扩展模块的场合,因为 ...

  9. php中操作mysql的函数库

    发现php中的mysql库是一个函数库 而不是一个类库  使用面向过程的形式组织. mysql_affected_rows -- 取得前一次 MySQL 操作所影响的记录行数 mysql_change ...

  10. python调用js库中的函数_Python 调用JS文件中的函数

    Python 调用JS文件中的函数 1.安装PyExecJS第三方库 2.导入库:import execjs 3.调用JS文件中的方法 Passwd = execjs.compile(open(r&q ...

最新文章

  1. 《Google软件测试之道》- Google软件测试介绍
  2. vmware14安装macos10.12完美可升级10.13
  3. 现在中国是以24枚金牌位列奖牌榜3位,美国英国分列1、2位
  4. 查找当前地形位置上的贴图信息
  5. 本科计算机专业学物理力学吗,力学专业
  6. 隐马尔可夫模型HMM[转载牛人,看了半天没看懂]
  7. Java Synchronized的用法
  8. logrotate测试_日志管理工具logrotate
  9. vue2.x使用jsoneditor编辑器
  10. 极值波延拓matlab函数,函数极值是什么意思
  11. javaGUI自制五子棋-实践周大作业
  12. 移动端高度兼容iPhoneX
  13. 第一次如何选择流量卡,长期套餐和短期套餐哪个好一点?
  14. 如何写好技术部门的年度 OKR
  15. 说几句得罪人的大实话
  16. 树莓派4B命令行安装网易云音乐播放在线歌曲
  17. 电脑c盘哪些文件可以删除_c盘满了怎么清理垃圾而不误删(答案在这里)
  18. Proteus 抢答器设计经验 边沿触发的单稳态触发器实现 74LS148的一些BUG 74LS05反相器
  19. php redis 群发邮件,redis的简单使用 异步发送邮件
  20. 景瑞地产商业智能BI整体实施过程

热门文章

  1. 计算机原理名词,计算机组成原理 常用名词解释
  2. win7下建立的虚拟机无法连上网络,提示本地连接受限制
  3. JavaEE个人学习总结
  4. 阿里云 HotFix 注意事项
  5. 如何在海量元素中(例如 10 亿无序、不定长、不重复)快速判断一个元素是否存在?
  6. 无线网络经常掉线的解决办法
  7. 无线网络经常掉线的原因以及网络的设置
  8. 写一个iOS复杂表单的正确姿势
  9. 经典回味:ResNet到底在解决一个什么问题呢?
  10. 看着现在的勒布朗·詹姆斯,让人再次回想起篮球之神——伟大的迈克尔·乔丹和他的最佳搭档——斯科蒂·皮蓬