keil MDK编译器警告和错误详解(不定期更新)

keil MDK编译器警告和错误详解(不定期更新)
keil MDK编译器警告和错误详解(不定期更新)

工作后从单片机转成ARM,刚开始用ADS1.2编译器,用了一段时间,因为我接手的项目的老程序正是用ADS编译的,部门也大都在用.在学单片机的时候用的是keil c51编译器,ads和这个编译器在易用性上真是无法比较.后来渐渐知道keil已经被arm公司收购,现在keil MDK 成为了arm官方编译器,所以决定重新投奔keil,利用平时的时间,将原程序重新用mdk编译.mdk的优点就没必要说了,在这里把平时遇到的编译器给出的警告和错误信息给出详解,希望给初学者一点帮助,发现错误,需要补充的欢迎留言.

1.warning: #550-D: variable "d" was set but never used

描述:变量'd'定义但从未使用,或者是,虽然这个变量你使用了,但编译器认为变量d所在的语句没有意义,编译器把它优化了.

解决:仔细衡量所定义的变量d是否有用,若是认定变量d所在语句有意义,那么尝试用volatile关键字修饰变量d,若是真的没有用,那么删除掉以释放可能的内存.

2.warning: #1-D: last line of file ends without a newline

描述:文件最后一行不是新的一行.编译器要求程序文件的最后一行必须是空行,想了半天没想通为什么要这样.

解决:可以不理会.若是觉得出现警告不爽,那么在出现警告的文件的最后一行敲个回车,空出一行.

3. warning: #111-D: statement is unreachable

描述:声明不可能到达.多出现在这种场合:

int main(void)

{

...

while(1) //无限循环,这在不使用操作系统的程序中最常见

{

...

}

return 0; //这句声明在正常情况下不可能执行到,编译器发出警告

}

解决:不理会.

4. warning: C3017W: data may be used before being set

描述:变量'data'在使用前没有明确的赋值.如:

uint8 i,data; //定义变量i和data,二者都没有明确赋值

for ( i = 0; i < 8; i++) //变量'i'在语句中被赋值0

{

if ( IO1PIN & SO_CC2420 )

data |= 0x01; //变量'data'在使用前没有明确赋值,编译器发出警告

else

data &= ~0x01;

}

解决:应仔细衡量该变量的初始值是否为0,若是,可以不理会这个警告,因为MDK编译器在程序执行前,会将使用到的数据区初始化为0,但若是该变量的初始值不应该是0,忽略这个警告可能会引起致命错误.这个警告应引起足够重视.应养成变量赋初值的习惯,好在有编译器给把关.

5. warning: #177-D: variable "temp" was declared but never referenced

描述:变量'temp'进行了声明但没有引用.多出现在声明了一个变量,但却没有使用它,它和warning: #550-D: variable "temp" was set but never used不同之处在于temp从没有使用过.

解决:若是定义的变量确实没有用,删除掉;若是有用,则在程序中使用.

与该警告类似的还有warning: #177-D: function "MACProcessBeacon" was declared but never referenced

6. warning: #940-D: missing return statement at end of non-void function "DealwithInspect2"

描述:返回非空的函数"DealwithInspect2"的最后缺少返回值声明.如:

int DealwithInspect2(uint32 test)

{

...

...

...

//此处应该是return x;返回一个int型数据,若是没有返回值,编译器产生警告

}

7..warning: #1295-D: Deprecated declaration lcd_init - give arg types

描述:在定义函数的时候,如果你写上函数参数,就会有这个警告,比如void timer_init(); 这里就没有形参,如果这样的话,编译器会给出警告.

1. error: #65: expected a ";"

描述:缺少分号.大多是漏忘';'.

解决:双击错误行,在定位到错误点的附近找到没加';'号的语句,加上分号.并不一定在定位到的错误行才却分号,可能是这行的上一行,也可能是下一行.

2. error: #65: expected a ";"和error: #20: identifier "xxxx" is undefined一块出现,而且后面的error: #20错误可能一大堆

描述:这个错误对于第一次遇上的人来说绝对是个噩梦,当错误出现,满怀希望的双击错误提示,来到错误行时却愕然发现,错误行绝对没有错,于是找找错误行的上一行,下一行,没有错误,再找上上行,下下行...让人无比郁闷的事情出现了:编译提示的所有错误行都不可能有错误出现.其实这最可能是你在.h文件声明外部变量或者函数时,没有在声明语句的最后加分号!如果你有很多模块,如main.c,lcd.c,key.c...有很多头文件,如lcd.h,key.h,若是在lcd.h文件声明函数时没有加分号,那么这种错误可能定为到main.c中,所以要检查所有头文件.

解决:仔细检查.h文件,将分号补上.

3. Error: L6200E: Symbol flagu multiply defined (by uart0.o and main.o).

描述:变量(也是一种符号)flagu多处定义(在uart0.c中和main.c都定义了).通常错在全局变量定义重复.比如:在main.c中定义全局变量flagu:

uint8 flagu=0;

在uart0.c中也用到该变量,于是声明此变量,我通常都是先复制定义的变量再在变量前面加关键字extern修饰:

extern uint8 flagu=0;

然后编译,就会出现上面的连接错误,原因在于,我在uart0.c中是又定义了一个变量,而不是声明变量,因为我给变量赋了初值"flagu=0",这样就重复定义了变量flag.正确的声明方法是去掉赋值部分:

extern uint8 flagu;

解决办法:找到重复定义的变量,看情况修改一处.

4.error: #159: declaration is incompatible with previous "wr_lcd" (declared at line 40)

描述:在wr_lcd函数还没有声明之前就已经使用了.多出现在两种情况:第一种,wr_lcd函数体还没有写,就已经用到了它,这种情况多出现在写一个程序的大体结构中,只是简单写一下框架.第二种情况比较常见,函数a调用函数b,但函数b的函数体在函数a的下面:

void a(void) //函数a的实体

{

b(); //调用函数b

}

void b(void) //函数b的实体

{

...

}

这样如果点编译,就会产生error: #159的错误,因为当函数a调用函数b时,发现在这之前都没有函数b的任何声明.

解决方法:在函数a调用函数b之前,对函数b进行声明,如:

void b(void); //对函数b进行声明

void a(void) //函数a的实体

{

b(); //调用函数b

}

void b(void) //函数b的实体

{

...

}

5. error: #137: expression must be a modifiable lvalue

描述:表达式必须是一个可以修改的左值.主要出现在这种现象:

a=NUM;

NUM是一个数值或表达式,a为一个变量,但a被定义为像const这种不可更改的类型,导致NUM不能赋值给变量a.

解决方法:要么放弃赋值,要么修改变量属性.

6.error: #18: expected a ")"

如果是出现在c文件中, 多半是因为少了一个")",或者错误行有编译器不识别的字符

如果出现在头文件中,错误行又是一个函数声明,多半是因为在函数声明中有编译器不认识的字符.

7.error: #7: unrecognized token

未识别的标记,多半是切换成了中文标点。

KEIL51调试时一些的错误总结

KEIL51调试时一些的错误总结 (1)提示无M51文件 编译时候提示: F:\...\XX.M51 File has been changed outside the editor, reload ? ------ 解决方法: 重新生成项目,产生STARTUP.A51即可。 (2)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指令能使编译器除去上述警告信息。 如果函数可以在其执行时被调用,则情况会变得更复杂一些。这时可以采用以下几种方法:

使用H-Jtag或Jlinkv7单步调试

使用H-Jtag 的单步调试实验 启动H-Jtag,正确读取CPU 的ID 号。(这里默认您已经会使用H-Jtag,并且Jtag 板已经连接了开发板和PC、串口线也连接了开发板和PC) 说明:除去Jtag 接口、串口和LCD 接上设备外,不要接诸如USB 下载线等,因为单步调试时涉及中 断的调试会出现在中断响应的地方死循环的情况。 点击“”进入AXD 的调试页面,如下图所示: 然后点击“Options->Configure Target”进行配置,操作如下所示:

说明:这里直接将Jlink V7 的也选上了,下一节就不再进行说明。 配置过程,截图如下: 然后关闭AXD(其实也不用关闭AXD,直接点击“Files->Load Debug Symbols”选项,然后选择 TQ2440_Test.axf 文件,此时不推荐这样做),然后重新在ADS 1.2 中打开AXD,下面是加载完毕镜像后的

然后此时就可以单步调试了,下面列出常用的几个按钮以及功能(功能介绍依次从左到右介绍): 全速运行按钮:点击它就全速运行 暂停按钮:点击它可以暂停全速运行 调试按钮:实现单步调试,跳过函数调试等功能(中间4 个按钮) 显示执行点按钮:显示执行位置 断点按钮:设置断点 注意:单步调试时,对于中断等调试是没法进行的(比如接了USB 下载线),否则会出现在2440init.s 文件的415 行“ msr cpsr_cxsf,r1 ;SVCMode”处死循环,因为进入了中断响应子程序。 说明1:对于想要调试nand.c 文件的代码时,需要修改2440init.s 文件的314 和315 行,将其屏蔽(也就是前面加“;”号),并且要求从Nand Flash 启动才行,要Nand Flash 中的数据和您要调试的数据相同才行,否则是没法实现的。 说明2:对于调试时修改了代码,想要重新调试的解决方法为:在ADS 1.2 中编译(注意:是编译)镜像,然后再在AXD 中“Files->Reload Current Image”重新加载镜像即可。 说明3:对于已经设置过了AXD,然后第一次调试时打开AXD 出现错误的解决办法:首先重新配置AXD,然后点击“Files->Load Debug Symbols”,打开“TQ2440_Test.axf”文件,就可以加载镜像进行单步调 试了。这里仅仅抛砖引玉的初步介绍单步调试的方法,可能您在实际使用中还会遇到问题,请到天嵌科技的 论坛发帖子询问。 使用Jlink V7 的单步调试实验 在5.3.2 中已经添加了Jlink 的dll 文件,然后配置Jlink,首先打开“Options->Configure Target”,然后选择“Multe-ICE”,点击Configure 后,在出现的Jlink 配置单中使用默认配置即可;然后打开“Options->Configure Interface”,然后在出现的对话框中选择session file 页面,然后导入光盘的“Windows 平台开发工具包\Jlink 资源\init_sdram.txt”文件,操作如下图所示:

Keil C 编译器常见警告与错误信息

https://www.360docs.net/doc/f96053860.html,/support/man/docs/c51/c51_c277.htm错误信息查询 Keil C 编译器常见警告与错误信息 error C132 :“****”not in formal parameter list 花了偶将近半个小时来查找错误,最终发现原来是在头文件里的一个函数声明时露了一个分号造成紧挨着在它下面声明的参数not in formal parameter list。 记在在这里,免得以后忘记了,同时也供大家分享。 下面是另外一些常见的错误提示: 1.第一种错误信息 ***WARNING L15: MULTIPLE CALL TO SEGMENT SEGMENT: ?PR?_WRITE_GMVLX1_REG?D_GMVLX1 CALLER1: ?PR?VSYNC_INTERRUPT?MAIN CALLER2: ?C_C51STARTUP ***WARNING L15: MULTIPLE CALL TO SEGMENT SEGMENT: ?PR?_SPI_SEND_WORD?D_SPI CALLER1: ?PR?VSYNC_INTERRUPT?MAIN CALLER2: ?C_C51STARTUP ***WARNING L15: MULTIPLE CALL TO SEGMENT SEGMENT: ?PR?SPI_RECEIVE_WORD?D_SPI CALLER1: ?PR?VSYNC_INTERRUPT?MAIN CALLER2: ?C_C51STARTUP - 该警告表示连接器发现有一个函数可能会被主函数和一个中断服务程序(或者调用中断服务程序的函数)同时调用,

使用 db2pd 进行监视和故障诊断

使用 db2pd 进行监视和故障诊断 因为 db2pd 工具可从 DB2? 内存集合迅速返回即时信息,所以该工具可用于故障诊断。 该工具不需要获得任何锁存器或使用任何引擎资源就可以收集信息。因此,在 db2pd 收集 信息时,有可能(并且预计)会检索到正在更改的信息;这样,数据可能不是十分准确。 如果遇到正在更改的内存指针,可使用信号处理程序来防止 db2pd 异常终止。这可能会导 致输出中出现诸如以下的消息:“正在更改的数据结构已强制终止命令”。虽然如此,该工 具对于故障诊断却非常有用。在不锁存的情况下收集信息有两个好处:检索速度更快并且 不会争用引擎资源。 如果要在出现特定 SQLCODE、ZRC 代码或 ECF 代码时捕获关于数据库管理系统的信息,那 么可以使用 db2pdcfg -catch 命令完成此操作。捕获到错误时,将启动 db2cos(调出脚本)。db2cos 文件可以自动改变,以便运行解决问题所需的任何 db2pd 命令、操作系统命令或任何其他命令。在 UNIX? 和Linux? 上,模板文件 db2cos 位于 sqllib/bin 中。在 Windows? 操 作系统上,db2cos 位于 $DB2PATH in 目录中。 以下是使用 db2pd 快速故障诊断的一组示例。 场景 1:诊断锁定等待 使用 db2pd -db -locks -transactions -applications -dynamic 命令来获取下列 结果: 锁定: Address TranHdl Lockname Type Mode Sts Owner Dur HldCnt Att ReleaseFlg 0x07800000202E5238 3 00020002000000040000000052 Row ..X G 3 1 0 0x0000 0x40000000 0x07800000202E4668 2 00020002000000040000000052 Row ..X W* 2 1 0 0x0000 0x40000000 对于使用 -db 数据库名称选项指定的数据库,开头的结果会显示该数据库的锁定。您会发 现 TranHdl 2 正在等待 TranHdl 3 挂起的锁定。 事务: Address AppHandl [nod-index] TranHdl Locks State Tflag Tflag2 Firstlsn Lastlsn LogSpace SpaceReserved TID AxRegCnt GXID

KEIL常见编译错误大全

KEIL常见编译错误大全 【致命错误】 立即终止编译这些错误通常是命令行指定的无效选项的结果当编译器不 能访问一个特定的源包含文件时也产生致命错误 致命错误信息采用下面的格式 C51FATAL-ERROR– ACTION: LINE: ERROR: C51TERMIANTED. C51FATAL-ERROR– ACTION: FILE: ERROR: C51TERMIANTED. 下面说明Action和Error中可能的内容 Actions ALLOCATING MEMORY 编译器不能分配足够的存储区来编译指定的源文件. CREATING LIST-FILE/OBJECT-FILE/WORKFILE 编译器不能建立列表文件,OBJ文件,或工作文件这个错误的出现可能是磁盘满或写保护,或文件已存在和只读. GENERATING INTERMEDIATE CODE 源文件包含的一个函数太大,不能被编译器编译成虚拟代码.尝试把函数分小或重新编译. OPENING INPUT-FILE 编译器不能发现或打开所选的源或包含文件. PARSING INVOKE-/#PRAGMA-LINE 当在命令行检测到参数计算,或在一个#pragma中检测到参数计算,就产生这样的错误. PARSING SOURCE-FILE/ANALYZING DECLARATIONS 源文件包含太多的外部参考.减少源文件访问的外部变量和函数的数目. WRITING TO FILE

db2pd命令捕获死锁信息

本文通过一个实例讲解了在DB2版本9以后,如何使用db2pd命令捕获死锁信息 死锁经常会存在于我们的应用系统中,如何捕获死锁信息并解决死锁问题,是一个比较复杂的问题。DB2提供了死锁事件监控器来获取死锁信息,可以非常方便地获取死锁信息。从DB2版本8.2.2开始,DB2也可以使用db2pd命令和db2cos脚本来获取死锁信息,提供了一种新的途径来获取死锁信息。 从DB2版本9开始,我们可以使用db2pd -catch 命令来捕获错误信息,然后调用一个sqllib/db2cos 的脚本收集出错时的现场信息。该命令的使用语法如下: Usage: -catch clear | status | [] [count=] Sets catchFlag to catch error or warning. Error Codes: [,] / sqlcode=[,] ZRC (hex or integer) ECF (hex or integer) "deadlock" or "locktimeout" Actions: [db2cos] (default) Run sqllib/db2cos callout script [lockname=] Lockname for catching specific lock (lockname=000200030000001F0000000052) [locktype=] Locktype for catching specific lock (locktype=R or locktype=52) 下面我们通过一个实例来讲解如何使用db2pd -catch命令获取死锁信息。如无特殊说明,命令均使用DB2实例用户执行。 1、将$HOME/sqllib/cfg/db2cos例子脚本拷贝到$HOME/sqllib下,并改变属性为实例用户添加执行权限: cp $HOME/sqllib/cfg/db2cos $HOME/sqllib

JLINK使用指南

第二十三章:JLINK仿真调试器的使用 首先JLINK只能对NOR FLASH 进行烧写。 如何用JLINK将uboot烧写到NOR FLASH为例来讲解JLINK的用法。假定已经装好了JLINK驱动程序。 第一步:检测JLINK 是否和电脑连接上,用USB线连接JLINK和电脑打开J-Link Commander观察相关信息,看到如下信息证明JLINK已经和电脑连接上。 第二步:关掉上面的窗口,将JLINK和目标板连接,再次打开J-Link Commander观察相关信息,看到如下信息证明JLINK已经找到目标板的芯片。 第三步JLINK 相关设置首先打开J-Flash ARM 看到后选择Options Project Settings 或者直接按Alt+F7 进入工程设置。 在CPU选项中按下图进行选择。内核选择为ARM9,选Use target RAM(faster)Addr栏中填40000000 4KB

在FLASH选项中进行如下设置首先勾掉Automatically detect flash memory看到如下界面后点select flash-----Device选择SST39VF1601。设置完以后点击确认。注意BASE ADDR 为00000000. 第四步:点击file —>open或直接按Clt+O找到存放已经生成好的uboot.bin的文件,并打开uboot.bin。此时软件会提示Start address点击OK.

第五步按F7让JLINK软件实现自动下载。下图为程序下载完成后的界面。 整个过程到此结束,需要注意的是下载完成后必须拔掉JLINK程序才会跑起来。 说明:如果出现以下错误提醒,解决方法及可能原因: 1)注意BASE ADDR为00000000.可能设置错误了; 2)J-LINK复位时间短了或长了; 3)NOR FLASH里面有坏区或烧写误操作导致(通过H-JTAG清空,一般很少出现)。

Keil编译常见问题

Error: L6200E Error: L6200E: Symbol temp multiply defined (by and .在编译的时候出现了这个问题,但是检查不出来,希望各位大侠帮帮忙 什么变量你给付了两次值 你看看是不是那个外部变量你又给赋值了 申明,其他.c文件对应的.h文件中用extern引用 error: #20 error: #20: identifier "TIM2_IRQChannel" is undefined 谁能说说,哪里错了 你的固件库里的库文件没有添加进工程里面,所以出现未定义的情况。 TIM2_IRQChannel指定时器2的中断通道没有定义,其实在固件库对这些参数都有定义,宏定义代替了一串寄存器地址数据。需要将.C文件添加到工程文件中 warning: #1-D (7): warning: #1-D: last line of file ends without a newline 当使用keil编译时,弹出这样的警告信息:(7): warning: #1-D: last line of file ends without a newline 这个是由于在main函数的“}”后,没有加回车。 只要在main函数的“}”后加回车键,此警告信息即可消除。 error:#65 ...(27):error:#65:expected a ";"

分数送你了,问题在你回答之前已经解决了,头文件里的结构体定义里的最后一行没有加";" 如NB menu{..}; error:#1113: 折腾了大半天,才搞明白一个空操作的指令 先在网上查有的说是__asm{NOP;},从里调用,可犄角旮旯全找了,也没看到什么的文件。如果直接用,就出现error:#1113:InlineassemblernotpermittedwhengeneratingThumbcode 最后搜索这条错误,知道是因为__asm("指令");这种语法是内联汇编(inlineassembly)的语法。而RMDK下,内联汇编仅支持ARM汇编语言,不支持Thumb或者Thumb-2汇编语言;但内嵌汇编器支持Thumb和Thumb-2。 __asm放到一个单独的子函数再被调用就没问题了 如下: __asmvoidnop(void) { NOP } 然后在之后的C代码中调用该函数: voidmain() { ... nop(); ...? }

JLINK-rtt使用经验

Jlink RTT使用说明 单片机进行调试,一般都会分配出来一个调试的串口,如果单片机使用jlink烧录器,那么可以使用调试工具-RTT来代替串口进行信息的交互,不需要使用串口。 RTT(Real Time Terminal)是SEGGER公司新出的可以在嵌入式应用中与用户进行交互的实时终端。J-Link驱动4.90之后的版本都支持RTT。 需要安装J-Link驱动4.90之后的版本 1、使用JLINK SEGGER RTT打印调试信息 然后将这四个文件添加到自己工程中去,并且在主程序工程中包含SEGGER_RTT.h文件。 然后我们就可以直接在主函数中调用SEGGER_RTT_printf函数来打印调试信息了,该函数用法和printf函数类似,只是多了一个参数用来指定RTT通道。其中通道0,就是我们在调试时使用的通道。在主函数中添加如下代码即可打印信息。 SEGGER_RTT_printf(0,"Times %d\r\n",++u32Counter); 这个函数不支持浮点数,如输出浮点数可以先使用sprintf输出到缓存,再使用SEGGER_RTT_WriteString输出。 char rtt_out_str[80]; sprintf(rtt_out_str,"FloatValueIs%f;\n",var_float); SEGGER_RTT_WriteString(0,rtt_out_str); 单独打开RTT VIEWER 可以使用 如果打开JLinkRTTClient,必须同时打开RTT VIEWER 才可以使用

2、RTT输入检测 首先在程序中添加SEGGER_RTT_Read(0,rtt_buf,sizeof(rtt_buf)); 其次在J-Link RTT Viewer控制台的Input里面选择Sending/Send on Enter,然后End of Line 选择None 这样就可以通过下方输入框输入信息,按Enter发送 RTT VIEWER input设置 Win10自带的截图功能非常好用,快捷键Win + Shift + S

Keil编程常见错误

uint i, j; uchar a = 0xfe; EA = 1; EX0 = 1;不能这样 EA = 1; EX0 = 1; uint i, j; uchar a = 0xfe; 否则出现外部中断.C(18): error C141: syntax error near 'unsigned' 外部中断.C(18): error C202: 'i': undefined identifier 外部中断.C(19): error C141: syntax error near 'unsigned' 外部中断.C(19): error C202: 'a': undefined identifier 外部中断.C(23): error C202: 'i': undefined identifier 外部中断.C(27): error C202: 'a': undefined identifier 外部中断.C(29): error C202: 'a': undefined identifier 外部中断.C(31): error C202: 'i': undefined identifier 外部中断.c - 8 Error(s), 0 Warning(s). 原因:顺序问题,keil中的顺序 外部中断和内部中断的区别是什么; 外部中断是在单片机的外面给单片机一个信号单片机收到这个信号开始中断这是外部中断 内部中断是通过软件把中断打开执行中断

error c236:‘——display’:different length of parameter lists参数列表的长度不同。 检查开始的函数声明和这定义的参数是否一致。 还有参数没说明类型 有很大的区别, 错误3 unreferenced local variable 是未使用定义的变量,就是你定义了但是没有使用。 错误4 syntax error语法错误。 电平触发方式是按照电平的高或者低来触发,所以用的时候,必须在发生触发事件后立即将电平拉到非触发电平上,如果不这样做的话,会导致程序一直在触发事件程序入口处,而不会执行其他地方的程序。所以一般比较少用。 边沿触发方式是按照(上或下)边沿触发事件,由于触发的条件是边沿(上或下),所以即使在触发事件后,保存原来的电平都没有关系,不会一直在触发的,一般都用这种方式。 错误5 #define uchar unsigned char 不能写成 #define unsigned char uchar 否则出现会出现很多错误 错误6 不能这样定义字符数组 int a = “wwwsad”只能用char 错误7 error C244: 'table':can't initialize, bad type or class 。意思是错误的或者坏的类

Jlink 调试

Mini INS/GPS 如何使用Jink 调试 Mini INS/GPS 本文档主要解决以下问题: 1. Mini INS/GPS的SWD仿真接口的定义 2. Jlink 仿真器如何连接SWD仿真接口 3. 如何使用Jflash 下载目标HEX格式文件 4. 如何使用J link 仿真和调试程序

为了方便用户调试姿态解算程序,Mini INS /GPS 提供了SWD 调试接口。它只需要4个引脚就可以仿真和调试STM32F 的程序。 1. SWDIO 数据通信引脚 2. SWDCLK 时钟引脚 3. GND 公共地,需要与仿真器的地连接在一起 4. VCC 3.3V 电源,有的仿真器用于检测目标芯片是否已上电。 以下是SWD 仿真接口在Mini INS/GPS 板子上的位置和引脚定义 Mini INS /GPS 的SWD 调试接口 双色状态指示 LED SWD 调试接口

Jlink 仿真器的接口 SWD 接口Jlink 仿真器 J-Link是SEGGER公司为支持仿真ARM内核芯片推出的JTAG仿真器。配合IAR EWAR,ADS,KEIL,WINARM,RealView等集成开发环境支持所有ARM7/ARM9/ARM11内核芯片的仿真,通过RDI接口和各集成开发环境无缝连接,操作方便、连接方便、简单易学,是学习开发ARM最好最实用的开发工具。Jlink 是分版本的,只有Jlink V6 或者更高版本的Jlink 才支持SWD 接口目前市面上的大都是Jlink V8版本,这是完美支持SWD 调试的 注意: SWD 数据 SWD 时钟 目标板电压 目标板GND 只需连接其中一个就可

db2 实战常用命令

db2 force application all –断开所有链接数据库的应用 db2 list application-查看连接数据库的应用 db2 bakup db ksdbs 备份数据库 db2start db2stop启停数据库 db2 connect reset断开所有链接 scp get trans.ini -r back@10.10.9.160/home/back/bccbin \ scp local_file remote_username@remote_ip:remote_folder 或者 scp local_file remote_username@remote_ip:remote_file scp -r ip:/db/dbhome/dbguard 【1】 db2top –d ksdbs db2pd -d ksdbs -stat >stat.log 查看数据库状态(数据超大超详细) 【1】find -type f | xargs dos2unix 遍历格式转换 【1】 find . -name [A-Z]* -print 查找当前目录下以大写字母命名的文件 【1】 >db2ckbkp 检查数据库的完整性 >tee 命令 用途--显示程序的输出并将其复制到一个文件中。 【1】db2 connect reset db2 list directory db2 list active databases db2 get db cfg db2 get db cfg 【1】归档日志 db2 update db cfg for db_name using LOGRETAIN ON 更改归档目录: db2 update db cfg for db_name using LOGARCHMETH1 "disk:/archive/db_name_db_log" 在我重新连接数据库的时候提示: db2 connect to t_1 to mydb SQL1116N A connection to or activation of database "T_1" cannot be made because of BACKUP PENDING. SQLSTATE=57019 网上找了n多最后才知道 若修改数据库LOGRETAIN参数,从循环日志模式改为归档日志模式,则会导致数据库backup pending状态。

keil c语言编程常见错误分析要点

1. Warning 280:’i’:unreferenced local variable 说明局部变量i 在函数中未作任何的存取操作解决方法消除函数中i 变量的宣告及即定义的参数在程序中并未调用 2 Warning 206:’Music3’:missing function-prototype 说明Music3( )函数未作宣告或未作外部宣告所以无法给其他函数调用 解决方法将叙述void Music3(void)写在程序的最前端作宣告如果是其他文件的函数则要写成extern void Music3(void),即作外部宣告 3Error:318:can’t open file ‘beep.h’ 说明在编译C:\8051\MANN.C 程序过程中由于main.c 用了指令#i nclude “beep.h”,但却找不到所致解决方法编写一个beep.h 的包含档并存入到c:\8051 的工作目录中 4 Error 237:’LedOn’:function already has a body 说明LedOn( )函数名称重复定义即有两个以上一样的函数名称 解决方法修正其中的一个函数名称使得函数名称都是独立的 5 ***WARNING 16:UNCALLED SEGMENT,IGNORED FOR OVERLAY PROCESS SEGMENT: ?PR?_DELAYX1MS?DELAY 说明DelayX1ms( )函数未被其它函数调用也会占用程序记忆体空间

解决方法去掉DelayX1ms( )函数或利用条件编译#if …..#endif,可保留该函数并不编译 6 ***WARNING 6 :XDATA SPACE MEMORY OVERLAP FROM : 0025H TO: 0025H 说明外部资料ROM 的0025H 重复定义地址 解决方法外部资料ROM 的定义如下Pdata unsigned char XFR_ADC _at_0x25 其中XFR_ADC 变量的名称为0x25,请检查是否有其它的变量名称也是定义在0x25 处并修正它 7 WARNING 206:’DelayX1ms’: missing function-prototype C:\8051\INPUT.C Error 267 :’DelayX1ms ‘:requires ANSI-style prototype C:\8051\INPUT.C 说明程序中有调用DelayX1ms 函数但该函数没定义即未编写程序内容或函数已定义但未作宣告 解决方法编写DelayX1ms 的内容编写完后也要作宣告或作外部宣告可在delay.h 的包含档宣告成外部以便其它函数调用 8 ***WARNING 1:UNRESOLVED EXTERNAL SYMBOL SYMBOL:MUSIC3

IBM DB2 Connect 简介

IBM DB2 Connect 简介: 内有乾坤 2005 年 4 月 对于那些脱离大型机的应用程序——分布式应用程序来说,IBM? DB2? Connect? 已成为向它们开放 DB2 for z/OS 数据库以及 zSeries 硬件平台传统公认的所有优点的首选方法。本文是一个由 5 部分组成的系列中的第一篇文章,这个系列将介绍 DB2 Connect 的一些主要特性,这些特性有助于提高交付随需应变解决方案的能力。 简介 1993 年,计算机界的专家们预测大型机(mainframe)将迅速退出历史舞台。他们宣称,未来的计算基础设施将会是一个高度分布的、松散连接的个人电脑和客户机-服务器系统的集合。作为该行业的相关参与者,IBM 几乎无立身之处。 我们都知道后来是怎么回事。IBM 设法在分布式市场重新占得先机,并成为大型机(mainframe)技术的“主要”支持力量。从价格的角度来看,IBM 大大缩减了大型机的价格。从技术的角度来看,IBM 放弃了为其大型机提供动力的双极技术(bi-polar technology),而将大量赌注放在 CMOS 芯片技术上,试图通过这种方式,以剧减的价格交付大型机级别的计算。更重要的是,对于所谓大型机是一种过时的技术,属于大型机的时代已经一去不复返这类荒诞的说法,这是一个直接有力的反击。 如今,企业比以前更多地使用大型机作为其计算基础设施的基础。与此同时,Linux?、UNIX?、Windows? 和其他客户机-服务器系统(在此处被称作分布式平台)并没有消失,因为大型机又重新为它们在企业中赢得了地位。 实际上,这些分布式计算基础设施经历了一个发展的过程。最终的结果是,客户希望将分布式平台的简单性和长处与大型机技术无可匹敌的强大性相结合。如果说信息技术(IT)中有一个领域能让这种结合产生立杆见影的效果,那么这个领域一定是数据库应用领域。 IBM DB2 Universal Database? for z/OS (DB2 for z/OS) 原本是一种大型机数据库,现在已转型为世界上第一种用于客户机-服务器应用程序的数据库服务器。在如今的数据中心里,当您使用运行在大型机上的 CICS 或 COBOL 应用程序时,很可能会遇到 DB2 for z/OS 被用作运行在 Windows、UNIX 和 Linux 上的应用程序的数据库服务器的情况。 正是在这种环境下,我发现 IBM DB2 Connect (DB2 Connect) 产品扮演着一个中心角色。如今,对于那些脱离大型机的应用程序——分布式应用程序来说,DB2 Connect 已成为向它们开放 DB2 for z/OS 数据库和 zSeries 硬件平台的所有传统公认优点的事实上的首选。 为什么当其他产品遭遇失败的时候,DB2 Connect 却能获得成功呢?这个关于DB2 Connect 的系列试图描述 DB2 Connect 的一些关键特性,我们相信正是这

keil常见错误及解决办法

查看文章 【转】 KEIL C编译器常见警告与错误信息的解决办法 2010-09-03 16:21 转载自朝阳暮鼓 最终编辑朝阳暮鼓 KEIL C编译器常见警告与错误信息的解决办法 1. Warning 280:’i’:unreferenced local variab le 说明局部变量i 在函数中未作任何的存取操作 解决方法消除函数中i 变量的宣告 2 Warning 206:’Music3’:missing function-prototype 说明Music3( )函数未作宣告或未作外部宣告所以无法给其他函数调用 解决方法将叙述void Music3(void)写在程序的最前端作宣告如果是其他文件的函数 则要写成extern void Music3(void),即作外部宣告 3 Compling :C:\8051\MANN.C Error:318:can’t open file ‘beep.h’ 说明在编译 C:\8051\MANN.C 程序过程中由于main.c 用了指令#include “beep.h”,但却找不到所致 解决方法编写一个beep.h 的包含档并存入到c:\8051 的工作目录中 4 Compling:C:\8051\LED.C Error 237:’LedOn’:function already has a body 说明LedOn( )函数名称重复定义即有两个以上一样的函数名称 解决方法修正其中的一个函数名称使得函数名称都是独立的 5 ***WARNING 16:UNCALLED SEGMENT,IGNORED FOR OVERLAY PROCESS SEGMENT: ?PR?_DELAYX1MS?DELAY 说明DelayX1ms( )函数未被其它函数调用也会占用程序记忆体空间 解决方法去掉 DelayX1ms( )函数或利用条件编译#if …..#endif,可保留该函数并不编译 6 ***WARNING 6 :XDATA SPACE MEMORY OVERLAP FROM : 0025H TO: 0025H 说明外部资料ROM 的0025H 重复定义地址 解决方法外部资料ROM 的定义如下 Pdata unsigned char XFR_ADC _at_0x25 其中XFR_ADC 变量的名称为0x25,请检查是 否有其它的变量名称也是定义在0x25 处并修正它

Pages 的简介与使用方法

株洲职业技术学院专业论文(设计)

题目: 关于Pages 的简介与使用方法 Pages on the history and method of use 学院株洲职业技术学院 年级专业苹果动漫1201班 学生姓名龙甜 学号201210330124 指导教师李思静 完 成 日 期 2012 年 12 月 株洲职业技术学院专业论文 诚信声明 本人郑重声明:所呈交的专业论文,题目《 关于Pages的简介与使用方法》 是本人在指导教师的指导下,进行研究工作所取得的成果。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式注明。除此之外,本论文不包含任何其他个人或集体已经发表或撰写过的作品成果。本人完全意识到本声明应承担的法律责任。

作者签名:龙甜 日期:2012年12月21日 关于P a g e s的简介与使用方法 龙甜 摘要 P a g e s是苹果公司多功能办公软件套装A p p l e W o r k s的继承者,是一个用于文字处理和页面排版的应用程序。它是由苹果公司所开发,包括在i W o r k软件套装中。P a g e s支持多栏排版,文本段落样式,脚注和其他高级文字处理功能,并为用户提供了强大的模板功能。创建的文档可以导出多种文件格式,同样也能导入A p p l e W o r k s和微软W o r d文件。文档中可直接绘制形状,并修改属性;可以环绕文本;可以插入图形,并设置阴影,多角度旋转等。并且,P a g e s可以制作各种宣传海报,新闻报道,贺卡,请柬,论文和教学材料等。并能从i T u n e s,i M o v i e和i P h o t o中接受数据,设置U R L链接。 关键词:P a g e s使用方法苹果 Abstract P a g e s i s a A p p l e C o r p m u l t i f u n c t i o n a l o f f i c e s o f t- w a r e s u i t e a s u c c e s s o r t o A p p l e W o r k s,i s o n e f o r w o r d p r o c e s s i n g a n d p a g e l a y o u t a p p l i c a t i o n.I t i s t h e A p p l e C o r p f o r t h e d e v e l o p m e n t,i n c l u d i n g i n t h e i Wo r k s o f t- w a r e s u i t e.P a g e s s u p p o r t s m u l t i p l e c o l u m n l a y o u t,t e x t p a r a g r a p h s t y l e s,f o o t n o t e s a n d o t h e r a d v a n c e d t e x t p r o c-

Keil+C编译器常见警告与错误信息的解决方法

??????? 本章列出了编程中可能遇到的致命错误语法错误和警告信息每节包括一个信息 的主要说明和消除错误或警告条件可采取的措施 致命错误 致命错误立即终止编译这些错误通常是命令行指定的无效选项的结果当编译器不能访问一个特定的源包含文件时也产生致命错误 致命错误信息采用下面的格式 C51 FATAL-ERROR – ACTION LINE: ERROR: C51 TERMIANTED. C51 FATAL-ERROR – ACTION FILE: ERROR: C51 TERMIANTED. 下面说明Action和Error中可能的内容

Actions ALLOCATING MEMORY 编译器不能分配足够的存储区来编译指定的源文件 CREATING LIST-FILE / OBJECT-FILE / WORKFILE 编译器不能建立列表文件OBJ文件或工作文件这个错误的出现可能是磁盘 满或写保护或文件已存在和只读 GENERATING INTERMEDIATE CODE 源文件包含的一个函数太大不能被编译器编译成虚拟代码尝试把函数分小或 重新编译 OPENING INPUT-FILE 编译器不能发现或打开所选的源或包含文件 PARSING INVOKE-/#PRAGMA-LINE 当在命令行检测到参数计算或在一个#pragma中检测到参数计算就产生这样 的错误 PARSING SOURCE-FILE/ANALYZING DECLARATIONS 源文件包含太多的外部参考减少源文件访问的外部变量和函数的数目 WRITING TO FILE 当写入列表文件OBJ文件或工作文件时遇到的错误

使用db2pd 进行监视和故障诊断

db2 使用db2pd 进行监视和故障诊断 因为db2pd工具可从DB2? 内存集合迅速返回即时信息,所以该工具可用于故障诊断。 该工具不需要获得任何锁存器或使用任何引擎资源就可以收集信息。因此,在db2pd收集信息时,有可能(并且预计)会检索到正在更改的信息;这样,数据可能不是十分准确。如果遇到正在更改的内存指针,可使用信号处理程序来防止db2pd异常终止。这可能会导致输出中出现诸如以下的消息:“正在更改的数据结构已强制终止命令”。虽然如此,该工具对于故障诊断却非常有用。在不锁存的情况下收集信息有两个好处:检索速度更快并且不会争用引擎资源。 如果要在出现特定SQLCODE、ZRC 代码或ECF 代码时捕获关于数据库管理系统的信息,那么可以使用db2pdcfg -catch命令完成此操作。捕获到错误时,将启动db2cos(调出脚本)。db2cos文件可以自动改变,以便运行解决问题所需的任何db2pd命令、操作系统命令或任何其他命令。在UNIX? 和Linux? 上,模板文件db2cos位于sqllib/bin中。在Windows? 操作系统上,db2cos位于$DB2PATH\bin目录中。 以下是使用db2pd快速故障诊断的一组示例。 场景1:诊断锁定等待 使用db2pd -db -locks -transactions -applications -dynamic 命令来获取下列结果: 对于使用 -db 数据库名称选项指定的数据库,开头的结果会显示该数据库的锁定。您会发现TranHdl 2 正在等待TranHdl 3 挂起的锁定。 您会发现TranHdl 2 与AppHandl 11 相关联,而TranHdl 3 与AppHandl 12 相关联。 您会发现AppHandl 12 最后运行动态语句17, 1。ApplHandl 11 是当前正在运行的动态语句17, 1,而最后运行的语句是94, 1。 您会发现,文本列显示与锁定超时相关联的SQL 语句。 场景2:使用-wlocks选项捕获所有正在等待的锁定 在下面的样本输出中,应用程序1(AppHandl 47)正在执行插入操作,而应用程序2(AppHandl 46)正在选择该表。 场景3:使用-apinfo选项捕获关于锁定所有者和锁定等待者的详细运行时信息 下面的样本输出是在与上面的场景 2 相同的条件下捕获的。 venus@boson:/home/venus =>db2pd -apinfo 47 -db pdtest 数据库分区 0 -- 数据库 PDTEST -- 活动 -- 正常运行 0 天 00:01:30

相关文档
最新文档