void adfa()interrupt0
{
timesec=0;
timemin=0;
r0++;
delay(5);
if(r0>11)
r0=11;
}
void adfii()interrupt2
{
if ( pausekey==0)
{
beepIO=0;
while(pausekey==0);
while(pausekey==1);
while(pausekey==0);
delay(8);
}
else
{
timesec=0;
timemin=0;
r0--;
delay (5);
if(r0<=0)
r0=1;
}
}
unsigned int timesec=0;
unsigned int timemin=0;
unsigned int r0=1;
void adfa(void) interrupt 0
{
timesec=0;
timemin=0;
r0++;
delay(5);
if(r0>11)
r0=11;
}
void adfii(void) interrupt 2
{
if ( pausekey==0)
{
beepIO=0;
while(pausekey==0);
while(pausekey==1);
while(pausekey==0);
delay(8);
}
else
{
timesec=0;
timemin=0;
r0--;
delay (5);
if(r0<=0)
r0=1;
}
}
void main(void)
{
//添加测试代码
}
比如:
oid (*vtable)(); //函数指针
vtable = (void (*)()) (0x08000000);//定位到指定的入口地址0x08000000
(*vtable)();//假如地址0x08000000放的是entry函数,则调用entry()函数
这样编写代码的目的是为了在(*vtable)();
处调用entry()
函数,但编译器并不知道开发者的意图,仍会按照自己的逻辑把entry()
优化掉,因为它认为该函数并未被调用,则在链接阶段,就不会把该函数链接进去。
因此,当执行(*vtable)();
时,里面的内容则不是entry()
的代码了,可能产生不可预知的错误。
那,我们可以告诉编译器不要去优化entry()
这个函数吗?可以的,这时我们可以使用链接器命令:--keep=section_id
此选项保证在删除未使用节时,不能删除指定的输入节。
作为一名资深的IT专家,我可以给提供一些解决Keil编程时遇到错误报错的方法或技巧:
总之,解决问题的关键是花时间仔细分析错误提示信息和找到正确的解决方法,同时对于工具和代码的使用要熟练掌握。