我在用C写一个在松翰单片机上跑的程序.里面要写FLASH.松翰里面写FLASH很麻烦啊,要把我要写的内容的开始地址和长度设置到专用的寄存器里(不能直接某地址写某数).但编译总有警告:
conversion from `pointer to __RAM unsigned char' to `unsigned char' is compiler dependent
non_ANSI_rules : conversion from `pointer to __RAM unsigned char' to `unsigned char' is undefined
我是这样写的:
unsigned char ADD[6];
ADD数组里面是要保存进FLASH的数据,PERAML是寄存器,用来指定我要写的RAM的开始地址的.
PERAML = (unsigned char )ADD;
就是不让我把一个地址存进一个变量.怎么才能把一个变量的地址存进另一个变量啊!我试过一样的程序在keil C里面都无问题的.松翰把单片机设计
成写flash非要往寄存器里存变量的地址,但C编译器又不让你这样写,快被它气死了.
此外,我觉的编译器有问题.我想反过来把FLASH里面的值读到变量里,别的C环境都是很简单的,但这里必出问题.语法是没问题通过的,但必然会生成
一个_indir_rom2,不知道是什么东西,然后提示这个东西在我这段读FLASH内容的子函数里及中断程序里多重调用了.狂晕!然而要不这样读FLASH,
就根本无这东西生成,也就没有多重调用的错误(很恶心的是,一旦它认为你有多重调用,就一定是error不让你过而不是警告,很多时候我们写软件的自己
知道自己程序的结构实际上不会产生问题的嘛),害的有时候要实现同一个功能要写两个名字不一样的子函数,一个在中断里用.外面用另一个才能编译
通过!太变态的编译器了. |