如何在PIC中定义绝对地址变量?
大家好,我目前是想在PIC里内部FLASH定位一段数据,比如把 0x11强制写在到内部FLASH地址0x0200段,目前用的编译器是MPLAB 8.9版本,MCU是PIC18F25K80
我在网上查了好多指令,比如:
//volatile unsigned char Portvar __at 0x06;
//int inputBuffer @ 0x2000;
都不能将数据定位在想要的地址段里,请问大家有什么好的方法吗?刚接触这个MCU,向大家请教下。 {:loveliness:}谢谢大家,已经解决问题了,编译器的伪指令问题,解决方法是:
#pragma romdata Appvolatile=0x1000
rom unsigned char Appvol={0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88};
这样就在MCU ROM中的0x1000为起始地址强行放下8字节数据 {:cry:}是不是PIC已经没多少人用了,网上查半天,连编译器手册也下了,试了也不行。 关键字: XC8用户指南。。。
网上搜一下就有了。 yoursnemo 发表于 2018-5-2 15:54
关键字: XC8用户指南。。。
网上搜一下就有了。
我下载了论坛的,里面介绍的三种方法试了之后都不行
https://www.amobbs.com/thread-5636252-1-1.html?_dsign=d9eb7b4b 现在都流行用MPLAB X了,MPLAB 很少用了吧 一心2013 发表于 2018-5-2 15:56
我下载了论坛的,里面介绍的三种方法试了之后都不行
https://www.amobbs.com/thread-5636252-1-1.html?_ ...
你是要存在ROM还是RAM呀?
存在ROM区用CONST限定符+@地址,存在RAM可以用volatile限定符+@地址。 yoursnemo 发表于 2018-5-2 16:07
你是要存在ROM还是RAM呀?
存在ROM区用CONST限定符+@地址,存在RAM可以用volatile限定符+@地址。 ...
就是在程序中固定的地址里定义几个字节的数据业作为程序版本号。
是想存在ROM里,其实就是MCU的内部FLAHS,在固定的地址,每次通过BOOTLOADER升级时,先读程序版本号,再决定是否升级
目前就是卡在如何在程序中强行把版本号定在绝对地址上。 楼上正解 一心2013 发表于 2018-5-2 16:19
就是在程序中固定的地址里定义几个字节的数据业作为程序版本号。
是想存在ROM里,其实就是MCU的内部FLAH ...
用const就行了。 你用的MCC18编译器还是XC8编译器
MCC18放ROM是const rom unsigned int xxx,定义地址我也忘了,大概是@
xc8是const unsigned char xxx __at(0x0000) = {0, 1, 2, 3}; yoursnemo 发表于 2018-5-2 16:31
用const就行了。
虽然最终没采用这位网友的方法,但回答得比较多,所以莫元给这位网友,同时谢谢大家的回复 编译器还是用的MCC18啊? leolong03 发表于 2018-5-13 13:28
编译器还是用的MCC18啊?
{:sweat:} 其实我也是第一次用这个芯片 ,不知道 哪个编译器好,公司用这个我也就用这个,但从各方反应来看,应该是一个很古董的东西 一心2013 发表于 2018-5-13 22:26
其实我也是第一次用这个芯片 ,不知道 哪个编译器好,公司用这个我也就用这个,但从各方反应来 ...
看写法像,建议用他们新的XC8,所有的8位MCU都可以用这个了 本帖最后由 K7toubleaz 于 2018-5-23 02:46 编辑
用XC8就看XC8的用戶手冊25頁有說绝对寻址的方式{:biggrin:} K7toubleaz 发表于 2018-5-23 02:44
用XC8就看XC8的用戶手冊25頁有說绝对寻址的方式
谢谢坛友资料,我刚才看了下,那个指令我之前试过,不行,可能是编译器问题,公司用的是Mplab V8.90,估计是比较旧的了,现在准备转Freescale,也懒得换了。我到时整理个工程出来,给大家以后参考。
页:
[1]