一心2013 发表于 2018-5-2 15:06:29

如何在PIC中定义绝对地址变量?


大家好,我目前是想在PIC里内部FLASH定位一段数据,比如把 0x11强制写在到内部FLASH地址0x0200段,目前用的编译器是MPLAB 8.9版本,MCU是PIC18F25K80

我在网上查了好多指令,比如:
//volatile unsigned char Portvar __at 0x06;
//int inputBuffer @ 0x2000;
都不能将数据定位在想要的地址段里,请问大家有什么好的方法吗?刚接触这个MCU,向大家请教下。

一心2013 发表于 2018-5-2 16:52:02

{:loveliness:}谢谢大家,已经解决问题了,编译器的伪指令问题,解决方法是:

#pragma romdata Appvolatile=0x1000
rom unsigned char Appvol={0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88};

这样就在MCU ROM中的0x1000为起始地址强行放下8字节数据

一心2013 发表于 2018-5-2 15:23:33

{:cry:}是不是PIC已经没多少人用了,网上查半天,连编译器手册也下了,试了也不行。

yoursnemo 发表于 2018-5-2 15:54:49

关键字: XC8用户指南。。。
网上搜一下就有了。

一心2013 发表于 2018-5-2 15:56:36

yoursnemo 发表于 2018-5-2 15:54
关键字: XC8用户指南。。。
网上搜一下就有了。

我下载了论坛的,里面介绍的三种方法试了之后都不行

https://www.amobbs.com/thread-5636252-1-1.html?_dsign=d9eb7b4b

xinbihui 发表于 2018-5-2 16:05:29

现在都流行用MPLAB X了,MPLAB 很少用了吧

yoursnemo 发表于 2018-5-2 16:07:57

一心2013 发表于 2018-5-2 15:56
我下载了论坛的,里面介绍的三种方法试了之后都不行

https://www.amobbs.com/thread-5636252-1-1.html?_ ...

你是要存在ROM还是RAM呀?

存在ROM区用CONST限定符+@地址,存在RAM可以用volatile限定符+@地址。

一心2013 发表于 2018-5-2 16:19:37

yoursnemo 发表于 2018-5-2 16:07
你是要存在ROM还是RAM呀?

存在ROM区用CONST限定符+@地址,存在RAM可以用volatile限定符+@地址。 ...

就是在程序中固定的地址里定义几个字节的数据业作为程序版本号。

是想存在ROM里,其实就是MCU的内部FLAHS,在固定的地址,每次通过BOOTLOADER升级时,先读程序版本号,再决定是否升级

目前就是卡在如何在程序中强行把版本号定在绝对地址上。

rqiang 发表于 2018-5-2 16:30:45

楼上正解

yoursnemo 发表于 2018-5-2 15:06:30

一心2013 发表于 2018-5-2 16:19
就是在程序中固定的地址里定义几个字节的数据业作为程序版本号。

是想存在ROM里,其实就是MCU的内部FLAH ...

用const就行了。

liansh2002 发表于 2018-5-2 16:46:45

你用的MCC18编译器还是XC8编译器
MCC18放ROM是const rom unsigned int xxx,定义地址我也忘了,大概是@
xc8是const unsigned char xxx __at(0x0000) = {0, 1, 2, 3};

一心2013 发表于 2018-5-2 16:54:13

yoursnemo 发表于 2018-5-2 16:31
用const就行了。

虽然最终没采用这位网友的方法,但回答得比较多,所以莫元给这位网友,同时谢谢大家的回复

leolong03 发表于 2018-5-13 13:28:46

编译器还是用的MCC18啊?

一心2013 发表于 2018-5-13 22:26:00

leolong03 发表于 2018-5-13 13:28
编译器还是用的MCC18啊?

{:sweat:} 其实我也是第一次用这个芯片 ,不知道 哪个编译器好,公司用这个我也就用这个,但从各方反应来看,应该是一个很古董的东西

leolong03 发表于 2018-5-14 08:32:57

一心2013 发表于 2018-5-13 22:26
其实我也是第一次用这个芯片 ,不知道 哪个编译器好,公司用这个我也就用这个,但从各方反应来 ...

看写法像,建议用他们新的XC8,所有的8位MCU都可以用这个了

K7toubleaz 发表于 2018-5-23 02:44:46

本帖最后由 K7toubleaz 于 2018-5-23 02:46 编辑

用XC8就看XC8的用戶手冊25頁有說绝对寻址的方式{:biggrin:}

一心2013 发表于 2018-5-23 08:56:12

K7toubleaz 发表于 2018-5-23 02:44
用XC8就看XC8的用戶手冊25頁有說绝对寻址的方式

谢谢坛友资料,我刚才看了下,那个指令我之前试过,不行,可能是编译器问题,公司用的是Mplab V8.90,估计是比较旧的了,现在准备转Freescale,也懒得换了。我到时整理个工程出来,给大家以后参考。
页: [1]
查看完整版本: 如何在PIC中定义绝对地址变量?