IAR中怎样定义一个位于ROM中的函数指针数组
KEIL 中这样定义:code void (code *tt[]) ()={k1,k2。。。kn};在IAR 中呢??(主要用于键盘散转)
-----此内容被avr-job于2005-01-12,09:29:21编辑过 const unsigned char
和iccavr一样,都用const限定数组在rom 不是const,用__flash unsigned char __flash *p,code[]={k1,k2....,kn}//*p为指向flash的指针
p=&code //指针p指向code[]首地址 我可能没有说清楚:在这里k1,k2,....kn都是函数名,而要定义的数组是指针数组,指针又是函数指针。而且此数组位于ROM中。
目的是为了当调用函数k1,k2...时可以写成*tt()的形式。
按照3楼j的用法出现编译错误。提示是:
Error: a value of type "void (*)()" cannot be used to initialize an entity of type "int"
不知道在IAR和ICC中都是怎样定义的??? 在IAR中好像这样定义可以 void (*keyproc[])()={k1,k2}
反正编译是过了,但不知道是不是在rom中?再验证一下 数组不在ROM中,而在SRAM中.执行程序时编译器把函数k1,k2的入口地址以int的形式存于SRAM中.调用时取出执行k1,k2程序. 请问J那么如果在ROM中又该怎样定义呢?ICC也是这样定义么? 好像不行,至少目前没找到. 编译器对__flash, const等均不理会. 那就在SRAM里用吧
关键是这个选项得勾上
Teat'const' as '_flash' 这样吧:const void (* const tt[]) ()={k1,k2。。。kn}; {:biggrin:}void (* const tt[]) ()={k1,k2。。。kn}; bang ding yi xia
页:
[1]