搜索
bottom↓
回复: 5

请教MPLAB XC8,如何在C程序里面定义一个flash绝对地址数组?

[复制链接]

出0入0汤圆

发表于 2015-1-27 15:02:58 | 显示全部楼层 |阅读模式
如题;
编译器是MPLAB XC8,
想在单片机的FLASH内部定义一个数组,用于存放校准数据。
那么,C的语句是如何写的?这数组的元素的地址相对于 @绝对地址 是如何组织的?即是上升还是下降?

谢谢

出0入0汤圆

发表于 2015-1-28 08:28:37 | 显示全部楼层
自己试下就完全就知道了

出0入0汤圆

 楼主| 发表于 2015-1-28 16:30:42 | 显示全部楼层
嗯 只能自己试试了 呵呵

出0入0汤圆

发表于 2015-1-29 07:34:22 | 显示全部楼层
unsigned int DevParam1[1024] __attribute__ ((space(prog),address(0xA000)));
这个是C30里面的定义。可以参考一下。

出0入0汤圆

发表于 2015-1-29 08:43:01 | 显示全部楼层
2.5.2 绝对寻址
变量和函数可以通过使用__at()构造放置在绝对地址处。基于堆栈的 (auto和函
数参数)变量无法使用__at()说明符。
2.5.2.1 示例
以下显示了设为绝对寻址的两个变量和一个函数。
int scanMode __at(0x200);
const char keys[] __at(123) = { ’r’, ’s’, ’u’, ’d’};
int modify(int x) __at(0x1000) {
return x * 2 + 3;
}
2.5.2.2 差别
8位编译器使用了@符号来指定绝对地址。
16位和32位编译器使用了address属性来指定对象的地址。
2.5.2.3 移植到CCI
如果可能,避免将对象和函数设为绝对寻址。
MPLAB XC8中,将如下所示的绝对对象定义:
int scanMode @ 0x200;
更改为:
int scanMode __at(0x200);
在MPLAB XC16和XC 32中,将如下所示的代码:
int scanMode __attribute__(address(0x200)));
更改为:
int scanMode __at(0x200);
2.5.2.4 注意事项
在使用MPLAB XC8时,如果对某个对象同时应用了__at()和__section()说明
符,__section()说明符目前会被忽略。


说的是这个吗
参考MPLAB®XC8 C编译器用户指南(DS50002053D_CN)

出0入0汤圆

发表于 2015-2-9 21:24:14 | 显示全部楼层
这种东西都要看编译器
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-1 17:53

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表