keil编译成功但有警告信息怎么改

您所在的位置:网站首页 keil警告L16 keil编译成功但有警告信息怎么改

keil编译成功但有警告信息怎么改

#keil编译成功但有警告信息怎么改| 来源: 网络整理| 查看: 265

本文目录一览:

1、怎么忽略KEIL的警告 2、KEIL中编译汇编程序出现警告,如何处理? 3、keil写的程序一直有这两个警告,怎么解决,大神求解 4、在keil编译时出现警告 什么意思 怎么解决 5、启动keil5出现如图警告,并且写函数过程中,不会提示错误,求解决方法 6、keil警告怎么办? 怎么忽略KEIL的警告

用了几年的Keil,有时候会很烦那些编译时的警告,类似WARNING L16:UNCALLED SEGMENT、WARNING L15:MULTIPLE CALL,写程序的我们如果知道这些是没有问题的,就可以把这些警告给忽略掉,从而可以更专注的去解决其它地方出现的问题!

如上图,打开工程的Option for Target,在BL51 Misc下面有一个Warnings:Disable Warning Numbers输入框,在框里输入需要被忽略警告的编号,如WARNING L15则输入15,如有多个则用逗号隔开,如此编译器在链接时便不会再提示这个警告!

上图所用Keil版本:

KEIL中编译汇编程序出现警告,如何处理?

“请不要告诉我删除startup.a51。删除该程序警告虽然消除了,但运行结果是错误的。”

运行结果错误在别的方面。

从仿真结果来看,30H~3FH放置从00H到0FH的数,这不就是你所需的运行结果吗?

keil写的程序一直有这两个警告,怎么解决,大神求解

提示说你程序里有个未被识别的外部符号。名字是c_start

但是你程序里没有,是不是你没有发完整代码啊

或者是c_startup是用于编译器建立目标文件盒连接程序用的库,你看看keilc设置里面该打开的库打开了没。

在keil编译时出现警告 什么意思 怎么解决

这是个警告,编译是没有问题的,能产生hex文件的,就是你有些函数或者变量声明或者定义了,但是没有使用!基本不影响使用的如果要不报这个警告的话就把没用到的都删除就好了

启动keil5出现如图警告,并且写函数过程中,不会提示错误,求解决方法

Keil 编译时出现错误和警告的总结

      和C 编译器错误信息中文翻译

      (1)L15 重复调用

      ***WARNING L15: MULTIPLE CALL TO SEGMENT

      SEGMENT: ?PR?SPI_RECEIVE_WORD?D_SPI

      CALLER1: ?PR?VSYNC_INTERRUPT?MAIN

      CALLER2: ?C_C51STARTUP

      该警告表示连接器发现有一个函数可能会被主函数和一个中断服务程序(或者调用中断服务程序的函

      数)同时调用,或者同时被多个中断服务程序调用。

      出现这种问题的原因之一是这个函数是不可重入性函数,当该函数运行时它可能会被一个中断打断,从

      而使得结果发生变化并可能会引起一些变量形式的冲突(即引起函数内一些数据的丢失,可重入性函数在任何时候

      都可以被ISR 打断,一段时间后又可以

      运行,但是相应数据不会丢失)。

      原因之二是用于局部变量和变量(暂且这样翻译,arguments,[自变量,变元一数值,用于确定程序或子

      程序的值])的内存区被其他函数的内存区所覆盖,如果该函数被中断,则它的内存区就会被使用,这将导致其他函数

      的内存冲突。

      例如,第一个警告中函数WRITE_GMVLX1_REG 在D_GMVLX1.C 或者D_GMVLX1.A51 被定义,它被一个中断

      服务程序或者一个调用了中断服务程序的函数调用了,调用它的函数是VSYNC_INTERRUPT,在MAIN.C 中。

      解决方法:

      如果你确定两个函数决不会在同一时间执行(该函数被主程序调用并且中断被禁止),并且该函数不占

      用内存(假设只使用寄存器),则你可以完全忽略这种警告。

      如果该函数占用了内存,则应该使用连接器(linker)OVERLAY 指令将函数从覆盖分析(overlay

      analysis)中除去,例如:

      OVERLAY (?PR?_WRITE_GMVLX1_REG?D_GMVLX1 ! *)

      上面的指令防止了该函数使用的内存区被其他函数覆盖。如果该函数中调用了其他函数,而这些被调用在

      程序中其他地方也被调用,你可能会需要也将这些函数排除在覆盖分析(overlay analysis)之外。这种OVERLAY 指

      令能使编译器除去上述警告信息。

      如果函数可以在其执行时被调用,则情况会变得更复杂一些。这时可以采用以下几种方法:

      1.主程序调用该函数时禁止中断,可以在该函数被调用时用#pragma disable 语句来实现禁止中断的目的。必

      须使用OVERLAY 指令将该函数从覆盖分析中除去。

      2.复制两份该函数的代码,一份到主程序中,另一份复制到中断服务程序中。

      3.将该函数设为重入型。例如:

      void myfunc(void) reentrant {

      ...

      }

      这种设置将会产生一个可重入堆栈,该堆栈被被用于存储函数值和局部变量,用这种方法时重入堆

      栈必须在STARTUP.A51 文件中配置。这种方法消耗更多的RAM 并会降低重入函数的执行速度。

      (2)提示无M51 文件

      编译时候提示:

      F:\...\XX.M51

      File has been changed outside the editor, reload ?

      ------

      解决方法:

      重新生成项目,产生STARTUP.

      

1/9

A51 即可。

      (3)L16 无调用

      *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS

      SEGMENT: ?PR?_COMPARE?TESTLCD

      说明:程序中有些函数例如COMPARE(或片段)以前(调试过程中)从未被调用过,或者根本没

      有调用它的语句。

      这条警告信息前应该还有一条信息指示出是哪个函数导致了这一问题。只要做点简单的调整就

      可以。不理它也没什么大不了的。

      解决方法:去掉COMPARE()函数或利用条件编译#if …..#endif,可保留该函数并不编译。

      (4)L10 和L16"主程序名字写错(或无主程序)"

      

keil警告怎么办?

警告一般是有子函数没有用到,或有变量没有用到,对编译没有太大的影响,代码HEX是可以生成的,将HEX代码下载到单片机里运行看结果对不对就知道了。还有时可能会影响到程序的运行,需要查找警告的原因了。

标签: keil编译成功但有警告信息怎么改


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3