PIC中的#pragma idata 和#pragma udata
PIC中的#pragma idata 和#pragma udata:
idata表示已经初始化的数据。udata表示没有初始化的数据。
当一个数据块没有足够的空间用于存放一个连续的数据时(数组);此时便可用#pragma idata 或#pragma udata来定义一个新的存放数据块的区域。但是#pragma idata 或#pragma udata申请的空间也还是有限的,一般不能大于256,如果超过则只能另外想法办了。
为什么不能大于256?
可以看相关的IC链接文件.lkr,从它里面可以看到它是如何定义bank大小的,没有一个是大于0xff的,因为PIC18的命令是双字节的即只有16位,但是在一个操作RAM的命令中只有8位数据来表示RAM地址,其它的为操作码或者其它。故它最大的寻址范围只能256,如果大于256只能借助其它寄存器BSR来扩展地址。这也是BANK的由来。另外由于数组存放的空间应该放在一个连续的空间里,故不能大于256,因为大于256,命令是无法自动跨BANK寻址的,如果要跨BANK则只能事先设定好BANK区。
如何查看我们定义的变量存放在哪里?可以查看生成的.map文件。
map文件的生成设置:project-->build options-->project--->MPLINK mplinker,选择Generate map file.
它们的用法:
#pragma idata DataArray //一个数据块的开始
char DataArray[256]={0};
#pragma idata //一个数据块的结束
#pragma udata DataArray1 //一个数据块的开始
char DataArray1[256];
#pragma udata //一个数据块的结束
在PIC中的const关键字,及rom关键字,#pragma rom
在MC18编译器中。
const char array[300]={0};
这样定义了一个超过bank最大值的变量,在编译时会产生错误.为什么?
const虽然指明了将变量array存储在了rom区,但是在MC18编译器中却因为变量的指向是RAM区,所以它默认的情况下还是将数据存储在了RAM区。即const单独无法实现将数据存放在ROM区的作用。而在MC18编译器说明中,如果要将数据放在ROM区,则要加上rom关键字。即如下定义
rom char array[300]={0};
const rom char array[300]={0};这样才不会出错。
或者采用如下方式:
#pragma rom udatasection
const rom char array[300]={0};
#pragma rom
code:用于存放指令代码
rom:用于存储数据常量的.在map中的段名叫romdata.
PIC中的#pragma idata 和#pragma udata相关推荐
- #pragma comment和#pragma 预处理指令详解
该宏放置一个注释到对象文件或者可执行文件. 例如,#pragma comment(lib,"Ws2_32.lib")表示链接Ws2_32.lib这个库. 和在工程设置里写上链入 ...
- #pragma DATA_SECTION与#pragma CODE_SECTION的使用
(一)#pragma DATA_SECTION 利用CCS进行DSP编程时,如果不指定变量的存储位置,那么编译器会自动给变量分配存储位置,但是,有些时候,需要将某个变量存放到某个特定的位置,这个时候就 ...
- #pragma warning( pop ) #pragma warning( push )
今天在看源码的时候,遇到以下内容: #pragma warning(push)是保存当前的编译器警告状态: #pragma warning(pop)是恢复原先的警告状态. 例如: #ifdef _MS ...
- [转]#pragma once和#pragma comment
编程经常碰到,理解的总不是很透彻,在这里查阅资料总结一下! 在编写程序的时候,我们常用到#pragma指令来设定编译器的状态或者是指示编译器完成一些特定的动作. #pragma once : 这是一个 ...
- 预处理指令pragma常见用法集锦(#pragma once、#pragma comment和#pragma warning)
#pragma once: 这是一个比较常用的指令,只要在头文件的最开始加入这条指令就能够保证头文件被编译一次,避免文件被重复包含. ********************************* ...
- c语言 pragma code,关于#pragma CODE_SECTION的用法?
#pragma CODE_SECTION(adc_isr, "ramfuncs");这样的语句是什么意思呢?是不是需要经常调用的程序都需要作这样的定义? Seven Han: 关于 ...
- 关于keil-C51中code、idata以及xdata
对了,我最近开通了微信公众号,计划是两边会同步更新,并逐步的会将博客上的文章同步至公众号中. 感兴趣的朋友可以扫描下方的二维码或者搜索"里先森sements"来关注,欢迎来玩~! ...
- 【IoT】CC254x 中 data、idata、xdata 和 pdata 区别以及堆 Heap 内存布局
1.data.idata.xdata 和 pdata 区别 从数据存储类型来说,8051 系列有片内.片外程序存储器,片内.片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code ...
- 汇编语言中寻址方式[bx + idata]
[bx + idata]含义: 用于灵活的表示内存单元,[bx + idata] 的方式为高级语言实现数组提供了遍历机制. 数学化描述 :(ax) = ((da)*16 + (bx) + 200) 物 ...
最新文章
- 0459-Repeated Substring Pattern(重复的子字符串)
- 研发团队远程高效协作秘笈
- E - Olympic Medal CodeForces - 215B(数学 思维)
- python网络爬虫系列(一)——urllib库(urlopen、urlretrieve、urlencode、parse-qs、urlparse和urlsplit、request.Request类)
- 二叉搜索树中第k大元素_二叉搜索树中第K个最小元素
- 谈谈写程序与学英语(转载)
- SCOM 2012 R2监控Microsoft Azure服务(2)配置Azure监控
- 【渗透测试案例】——Web前端的SQL注入是怎么回事?
- swift 第五课 定义model类 和 导航栏隐藏返回标题
- MYSQL 远程访问被限制
- java B2B2C 源码 多级分销Springcloud多租户电子商城系统-Spring Cloud eureka
- 黑马程序员全套Java教程_Java基础入门视频教程零基础自学Java必备教程视频讲义(4)
- 牛津英语字典pdf下载_英语词典 | 5本图解词典,让你拥有英语思维,一图胜千言!...
- 谷歌chrome浏览器安装json插件
- 行业研究方法与框架合集
- 小米mix2安兔兔html5跑分,vivo X21跑分多少?高通骁龙660 AIE安兔兔跑分实测
- 快速采集交换机下计算机ip,怎样查看整个交换机里的电脑ip
- Access时间日期比较查询的方法总结
- js控制excel打印完美解决方案
- 浅析微信小程序生命周期之应用生命周期