keil编程问题,总是报错,但不知道怎么改


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;
}
}

img


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)
{  
//添加测试代码
}
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7417363
  • 你也可以参考下这篇文章:KEIL5打开keil4工程,找不到芯片驱动
  • 除此之外, 这篇博客: keil开发:如何让所需函数不被优化?中的 实例 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 比如:

    oid (*vtable)();          //函数指针
    
    vtable = (void (*)()) (0x08000000);//定位到指定的入口地址0x08000000
    
    (*vtable)();//假如地址0x08000000放的是entry函数,则调用entry()函数
    

    这样编写代码的目的是为了在(*vtable)();处调用entry()函数,但编译器并不知道开发者的意图,仍会按照自己的逻辑把entry()优化掉,因为它认为该函数并未被调用,则在链接阶段,就不会把该函数链接进去。

    因此,当执行(*vtable)();时,里面的内容则不是entry()的代码了,可能产生不可预知的错误。

    那,我们可以告诉编译器不要去优化entry()这个函数吗?可以的,这时我们可以使用链接器命令:--keep=section_id 此选项保证在删除未使用节时,不能删除指定的输入节。

  • 以下回答由chatgpt基于相关博客总结生成:

    作为一名资深的IT专家,我可以给提供一些解决Keil编程时遇到错误报错的方法或技巧:

    1. 首先,仔细查看错误提示,了解出错的原因和出错的具体位置。检查错误类型和错误代码,然后根据错误提示信息搜索解决方法。
    2. 在Keil软件中使用Debug功能进行调试,可以帮助我们快速定位错误所在位置。
    3. 除了Keil官方提供的文档,可以利用其他的参考资料来提高解决问题的效率。
    4. 多写代码,经验是解决问题最好的方法。如果我们不知道一些函数的具体用法,可以查找相关API文档,进行尝试和测试。
    5. 如果以上解决方法不行,可以把问题发表到相关的社区或论坛上,或者咨询其他专家的意见。

    总之,解决问题的关键是花时间仔细分析错误提示信息和找到正确的解决方法,同时对于工具和代码的使用要熟练掌握。