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) 物 ...
最新文章
- Spring Boot 打包不同环境配置与 Shell 脚本部署
- easyswoole数据库连接池_easyswoole redis连接池:集群迁移教程
- Java ArrayList和Vector、LinkedList与ArrayList、数组(Array)和列表集合(ArrayList)的区别...
- SPOJ Finding Fractions
- linux内核提取ret2usr,Linux内核漏洞利用技术详解 Part 2
- 正确使用日志的10个技巧(转)
- php打印函数console,PHP内置Web Server探究(2)自定义PHP控制台输出console函数
- 我的世界高亮显示服务器,waila(我的世界高亮显示没了)
- 电子工艺实训考核装置
- mysql创建表代码_MySQL------代码建表
- python实现矩阵乘法(不用numpy)
- java 服务器文件下载
- 阿里的黄金时代|一点财经
- 使用POI对excel文件进行读取
- 虚拟的超级计算机和云计算,概念PK:云计算与高性能计算(HPC)
- 视觉中国财报背后的版权门余波
- 生鲜小程序制作价格 平邑网站建设网店制作app开发
- Android 音视频开发实践系列-04-Android WebRTC推流到SRS服务器实现直播功能
- 显示器接口_电脑显示器接口类型哪个好?VGA、DVI、HDMI、DP接口区别对比科普
- 高中生可以学习编程吗?