您的当前位置:首页正文

IAR编译错误

2020-11-15 来源:星星旅游
IAR4.42A编译错误!请教!

程序编译时出现以下错误,实在不知道是什么原因,特向大家请教! Error[Pe223]: function \"assert_param\" declared implicitly E:\\涡街流量计\\

设计\\板2\\程序\\dft02\\library\\src\\stm32f10x_nvic.c 351

Error[Pa045]: function \"assert_param\" has no prototype E:\\涡街流量计\\设计

\\板2\\程序\\dft02\\library\\src\\stm32f10x_rcc.c 500

Error[Pe223]: function \"assert_param\" declared implicitly E:\\涡街流量计\\

设计\\板2\\程序\\dft02\\library\\src\\stm32f10x_rcc.c 530

第一你用了中文文件夹

第二没有定义assert_param这个函数

不太明白,assert_param函数在stm32f10x_conf.h中已经定义了。stm32f10x_conf.h已加到workplace里了。

还有文件夹用中文对程序有影响吗?

库文件版本混乱,估计用错IARv5的文件了.

库文件版本混乱,估计用错IARv5的文件了.

Error[Pe020]: identifier \"RCC_APB2Periph_GPIOC\" is undefined

查看是否包含了头文件:#include \"stm32f10x_rcc.h\"

想改STM32F10X_MD为STM32F10X_HD,但是IAR530就是编译

startup_stm32f10x_md.s文件,何解??

想改STM32F10X_MD为STM32F10X_HD,但是IAR530就是编译

startup_stm32f10x_md.s文件,何解??

编译那个文件和这个宏定义无关,你应该把STM32F10X_HD.s文件添加到你的工程

中,并把startup_stm32f10x_md.s从工程中删除或设为不编译才行

请问下,IAR编译出现这个错误

Error[Li005]: no definition for \"__program_start\"

[referenced from

F:\\sd\\WORM_SD_MMC1\\WORM_SD_MMC\\Debug\\Obj\\stm32f10x_vect

or.o]

,这是我在做实验时出现的错误,有时候从别的地方拷贝个stm32f10x_vector.o覆盖掉原来的就可以,有时就不行,怎么

回事呢这是?

再有,我想把一个数组定义在程序空间,在IAR环境下如何做呢?我用原来的 u8 code shuzu[]的方式怎么不行呢?把code

删掉就可以,忘各位高手解答下。

code这个标志应该不能用了吧,应该是用 const 就可

以完成

stm32f10x_vector.o 貌似应该是每次都从代码里面生成的吧,直接拷贝别的程序的文件,应该是不行的

你应COPY的是stm32f10x_vector.c这个文件,还有就是stm32f10x_vector.c在

IAR4XX及IAR5XX下用的不一样,你在固件库下的工程模板中应找到它。

o ,多谢解答,再有 uchar const

tabe[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,00

,0,0};

for(i=0;i<8;i++)

{

Lbytesend( i, 0, tabe,32);

Lbytesend( i, 32, tabe,32); /* Rbytesend( i, 0, tabe,32); Rbytesend( i, 32, tabe,32);*/

}

}

这个函数,在没有加const时编译是通过的,但是加了const时出现了这样的错误,Error[Pe167]: argument of type \"unsigned char const *\" is incompatible with parameter of type \"unsigned char *\" E:\\网络模块\\20090506试验\\USE_LCD.C 188

这又如何解决呢?

[入门求助] 发现个奇怪的问题,编译时,看到的都进来看下

我写程序的时候,加入了库文件,stm32f10x_nvic.c这个文件,编译的时候就出现了错误,加入stm32f10x_pwr.c 同样出现编译错误,错误是 在这两个文件中有未定义的东西,这两个是下载下来的库文件,我都没有动过,怎么就出现了未定义呢 很

纳闷。 附近就是编译错误的提醒 我去掉这两个文件,编译就正确了

未命名.jpg (43.42 KB)

打开stm32f10x_conf.h文件。

找到“//#define _NVIC”,把其前面的\"//“号删除。

找到”//#define _PWR“,把其前面的\"//“号删除。

我找到了你说的这个地方 但是它前面没有 “//‘ 所以问题 还是没有

解决 谢谢你的帮助

发表于 2009-5-17 15:25 | 只看该作者

问题已经解决 原因是没有包含文件《cortexm3_macro.s》这个文件,所以

才会出现上述的未定义。

使用IAR520 豆皮 LED工程模板 编译 豆皮I2C程序 不能通过

兄弟们,我下载了 论坛里的 24CXX的 豆皮的测试程序,只有.C 和 .H 文件,我直接用 豆皮的 IAR520的 LED 测试工程模板, 并把 i2c24c16.c i2c24c16.h 添加到 IAR的工程

中,也把 stm32f10xi2c.c 添加到工程了,但编译的时

候 一直提示 i2c24c16.c 里面

用到的 参数未定义。

至此编译失败,卡住了。 把整个工程都传上来,帮我看看,会是哪里的

问题?

24cxx.rar (254.34

KB)

StmFans思蜕盟论坛

 Linux

各发

行版本 优缺点 简介

收藏 分享 评

回复 引用

订阅 报告 道具 TOP

benladn911

2楼

发表于 2009-2-15 13:49 | 只看该作者

木牌盟友

附上图片:

55.jpg (28.89 KB)

66.jpg (17.5 KB)

思蜕盟淘宝销售处——迷你打铁铺 !豆皮、松鼠 开发板、

仿真器、STM32全系芯片!欢迎光临!

回复 引用

报告 道具 TOP

__stm32f100__

3楼

发表于 2009-2-15 15:43 | 只看该作者

stm32f10x_conf.h

里面#define _I2C前面的注释符号去掉。

银牌盟友

来自

原帖由 benladn911 于 2009-2-15 13:49 发表 兄弟们,我下载了 论坛里的 24CXX的 豆皮的测试程序,只有.C 和 .H 文件,我直接用 豆皮的 IAR520的 LED 测

www.haccom.com 试工程模板, 并把 i2c24c16.c i2c24c16.h 添加到

IAR的工程中,也把 stm32f10xi2c.c 添加到工程了,但

编译的时候 一 ...

stm32f10x_conf.h这是工程的一部分,也要复制过来。 如果使用了中断,stm32f10x_it.c和stm32f10x_vector.c

也要复制过来。

[ 本帖最后由 __stm32f100__ 于 2009-2-15 15:50 编辑 ]

www.haccom.com

AVR、MSP430、CC8051 、STM32 and STM8 „„„„

回复 引用

报告 道具 TOP

被过滤广告

[原创专辑] 求教关于IAR中变量的问题-怀疑编译器

大家好!谢谢大家刚才的回答。我的设计思路是SysTick中断中使sendtime++,然

后在主程序中判断每10次做一次操作。 我的原程序main.c的相关内容如下:

u32 sendtime;

u32 b1; u32 b2;

int main(void)

{ #ifdef DEBUG

debug(); #endif

b1=b2=0; sendtime=0; Set_System(); Set_USBClock(); Led_Config(); Key_Config(); JoyStick_Init(); Interrupts_Config(); EK_ADC_Init(); USART1_Init(); USART1_Configuration(); SysTick_Init_start();

ADC_SoftwareStartConvCmd(ADC1, ENABLE);

//USB_Init();

//while (bDeviceState != CONFIGURED);

//USB_Configured_LED();

b1 = sendtime; while (1)

{

b2 = sendtime;

if((b2-b1) > 10 )b1 = sendtime;

} }

编译没问题,但是在单步调试过程中发现while(1)循环中的b2=sendtime根本不执

行! 求救啊

yanyu_stm32

5楼

发表于 2009-2-12 14:06 | 只看该作者

IAR我刚刚用还需要大家指教!

我调试的过程中,在Disassembly窗口中的确发现是b2没编辑没

了。

银牌盟友 我最主要的问题是:如果我只在main程序中跟踪的话,在watch

窗口中的sendtime,b1,b2就都是0.

如果我在stm32f10x_it.c的SysTickHandler中设置断点的话,会看到watch窗口中的sendtime变化,但b1,b2还是不变啊非常

奇怪!我还是有弄不明白的地方!

附stm32f10x_it.c的SysTickHandler的部分代码:

void SysTickHandler(void)

{ savetime++; sendtime++; if (savetime > 500)

{

savetime = 0; directionflag = FALSE;

LCD_Clear(); LCD_Draw_ST_Logo();

}

。。。。。。。以下省略

回复 引用

报告 道具 TOP

6楼

发表于 2009-2-12 14:09 | 只看该作者

yanyu_stm32

还有一种可能:是不是我的变量声明有问题。

我在main.c中,声明了全局变量:

u32 sendtime; u32 b1; u32 b2;

银牌盟友

在中声明的外部变量: extern u32 sendtime;

目的是想中断程序能够使用main.c中的sendtime变量,不知道这样的声明方式是否正确?

思蜕盟淘宝销售处——迷你打铁铺 !豆皮、松鼠 开发板、仿

真器、STM32全系芯片!欢迎光临!

8楼

binglin

发表于 2009-2-12 15:00 | 只看该作者

用 VU32 sendtime;

b1及b2只在main里用,就无所谓呀。

思蜕盟后勤 在仿真时看不到变量的值,是很正常的事,记住C是编译程序,

它不是解释性语言。

因为很多变量,有可能被优化与寄存器变量了,因此看不到的可

能性是很大的。

回复 引用

报告 道具 TOP

catwill

9楼

发表于 2009-2-12 15:10 | 只看该作者

金牌盟友

回复 引用

报告 道具 TOP

以前也怀疑过keil C51„„ 后来研究keil的反汇编, 才发现它比我聪明多了„„

砖家级的水准„„

catwill

10楼

发表于 2009-2-12 15:11 | 只看该作者

金牌盟友

借个地方请教一下: IAR中如何自定义关键字?

比如

typedef unsigned char uint8 ;

如何让uint8 高亮/特殊颜色显示??

砖家级的水准„„

回复 引用

报告 道具 TOP

yanyu_stm32

11楼

发表于 2009-2-12 15:43 | 只看该作者

8楼的大哥,我知道b1,b2在main()里声明就可以了,而且实际

b2都没什么意义,但我始终找不到为什么在main()里无法察觉

sendtime的变化的原因。 银牌盟友

回复 引用

报告 道具 TOP

yanyu_stm32

13楼

发表于 2009-2-12 16:35 | 只看该作者

没有效果,不过我再用其它方法再试试,如果有结果再发上来,谢

银牌盟友

谢!!!!

回复 引用

报告 道具 TOP

14楼

__stm32f100__

发表于 2009-2-12 18:01 | 只看该作者

原帖由 catwill 于 2009-2-12 15:11 发表

借个地方请教一下: IAR中如何自定义关键字?

银牌盟友

来自 www.haccom.com

比如

typedef unsigned char uint8 ;

如何让uint8 高亮/特殊颜色显示??

自定义关键字。

02.JPG (28.86 KB)

www.haccom.com

AVR、MSP430、CC8051 、STM32 and STM8 „„„„

思蜕盟淘宝销售处——迷你打铁铺 !豆皮、松鼠 开发板、仿

真器、STM32全系芯片!欢迎光临!

回复 引用

报告 道具 TOP

15楼

catwill

发表于 2009-2-12 21:48 | 只看该作者

谢谢楼上的~~~

其实研究了一个下午的IAR手册,还是自己搞定了„„

金牌盟友

需要自己建立个TXT文档!

不过无限鄙视自己的E文实力„„

说实在的,我人生的一半就毁在这该死的E文上了„„

砖家级的水准„„

回复 引用

报告 道具 TOP

16楼

发表于 2009-2-13 10:27 | 只看该作者

今天程序测试已经通过了,结果如下:

1.许多变量不知道为什么无法监测到,无论是STEP运行还是用BREAK都一样,监视到的值始终是0。但程序运行的输出结果是正

确的。

2.定义成vu32类型的变量在本程序中的确不能直接用,先赋值给

一个u32变量再用就OK了。目前我还没搞清楚原因。 3.许多语句在汇编窗口中看似跳过了,实际上不是被编译器优化

yanyu_stm32 掉了,就是赋值已经在上面的语句中完成了,不会影响结果的。 总结:主要是我对IAR EWARM用的不熟,还要继续努力啊!

谢谢大家对我的帮助

[ 本帖最后由 yanyu_stm32 于 2009-2-13 10:29 编辑 ] 思蜕盟淘宝销售处——迷你打铁铺 !豆皮、松鼠 开发板、仿

真器、STM32全系芯片!欢迎光临!

报告 道具 TOP

被过滤广告

[入门求助] 很奇怪的一个链接错误,请教高手。。

Keil下的一个错误:

linking...

.\\Obj\\STM3210E-EVAL.axf: Error: L6218E: Undefined symbol Read_CH_Dot

(referred from main.o).

函数如此声明:

void Read_CH_Dot(u32 GBCode,u8 *pFontTemp);

定位在下面有颜色行: int main(void)

{

u8 FontTemp[32] = {0};

while (1)

{

Read_CH_Dot(1, FontTemp);

} }

不知道是什么问题,还请高手帮忙啊!

IAR 调试不通过,会出现调试时出现\"c:\\program

files\\IAR Systems\\Embedded workbench 5.4\\arm\\bin\\armlibsupport.dll\":段已解除锁定

在使用IAR5.3 JLINK RDI调试,在退出调试时出现\"c:\\program

files\\IAR Systems\\Embedded workbench

5.4\\arm\\bin\\armlibsupport.dll\":段已解除锁定。错误!!!

请问这是为什么呢???

StmFans思蜕盟论坛

竞猜——NBA2009年总冠军是谁?

收藏 分享 评分

回复 引用

订阅 报告 道具

TOP

2楼

发表于 2009-11-1 23:29 | 只看该作

呵呵! 问题已经解决了!

需要在你的OPTION /LINKER/CONFIG 选项内 override defalut 方框内设置成为 $PROJ_DIR$\\stm32f10x_flash.icf 就 可以了!

思蜕盟淘宝销售处——迷你打铁铺 !豆皮、松鼠 开发板、仿真器、STM32全系芯

片!欢迎光临!

【楼主位】 hhh_ccboy 电子白菜

今天试用窗口看门狗,本来是件很简单的事情,刚试的时候当然为了简单,就设置了在窗口中断中喂狗.后来发现,中断一直没有进入,结果系统不停复位.--已经确定是没有进中断.所以别问我中断函数是否有合理初始化.

当时,我的硬件初始化是这样的: //初始化时钟源 RCC_Configuration(); //NVIC

积分:274 派别: 等级:------ 来自:

NVIC_Configuration();

//初始化GPIO GPIO_Configuration();

以上是CPU进入MAIN函数就调用的初始化(3.0的库)--初始化硬件之后的代码,我们先忽略.

RCC_Configuration();中我还初始化了SYSTICK的中断. NVIC_Configuration();中,我初始化窗口狗的中断.

好了,就是这个初始化代码,我觉得都没什么问题,但窗口看门狗中断就死活没进.以为是其他问题吧,搞来搞去,最后折腾了1小时.试的没什么好试了,就把初始化代码改改顺序: //初始化时钟源 RCC_Configuration();

//初始化GPIO GPIO_Configuration();

//NVIC

NVIC_Configuration();

注意到,我其他代码是没有变的,这时候能进窗口狗中断了!WHY?我以为是不是GPIO上有些东西要弄?但后来看来看去,我的GPIO初始化都是对IO操作,没对其他任何东西操作.我又以为是不是RCC初始化后要延迟一段时间才能初始化NVIC,但加了超级长的延迟还是不行,最后我发现,只要这样:

//初始化时钟源 RCC_Configuration();

//这里是GPIO什么都不要紧,只要这句先行!!

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //NVIC

NVIC_Configuration();

//初始化GPIO GPIO_Configuration();

上面这样就成功了,也就是说,RCC初始化后,我至少要允许一个内部外设的物理时钟,窗口狗的中断才有效,不然死活不进窗口中断!其他中断是否这样我没试,但肯定SYSTICK中断没有这个问题,因为RCC的时候就初始化了SYSTICK中断了.

别怀疑我窗口狗的初始化代码,因为那段代码只有几句话,而且其他代码不变,只要先允许一个GPIO的外设,就可以了.

如果不是我低级错误或者没有看清楚DATASHEET,那么这究竟是什么回事? 很简单的代码,大家有空可以试试,估计你们手上有板的都会有窗口狗例程,有空帮我试一下是不是真的这样?? __________________________ 近来爱上STM32了. http://www.daxia.com/stm32/

2009-06-16,20:02:26

资料 邮件

编辑 删除

【1楼】 __STM32__ 积分:720 派别: 等级:------ 来自:

你的系统里是否使能了其他中断?

初始化GPIO的目的是什么?可以去掉这部分吗?

STM32固件库中有一个例子,可供参考。

2009-06-16,21:3资料 邮件 编辑 删除 0:54 【2楼】 hhh_ccboy 电子白菜 中断只有两个,一个是RCC初始化的时候利用库函数做了个SYSTICK的中断,第二个就是NVIC_Configuration()里面的窗口狗中断. 初始化GPIO是为了初始化我的按键和输出LED.因为系统至少要用些LED作指示才能知道看门狗是否生效的. 另外你说库里面有例子?不知道是哪里的. 我找过万利之类的板的例子,他们正好是初始化了GPIO再初始化NVIC的,所以没有这个问题. 我现在最希望的是,手上有板的人帮我试试这个效果.明显的就是:先初始化过GPI积分:274 派别: 等级:------ 来自: __________________________ 近来爱上STM32了. http://www.daxia.com/stm32/ 2009-06-16,21:55:21 O(其实重点是至少要有一个片内外设使能),再设置窗口狗中断,就没问题.先设置窗口狗中断,再初始化GPIO,窗口狗中断就不会进去了--就好像没有初始化过NVIC一样~ 资料 邮件 记着,我说的重点是: 编辑 删除 【3楼】 hhh_ccboy 电子白菜 要有一个片内外设使能---例如RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE),再初始化窗口狗中断,就没问题. 如果先初始化窗口狗中断,再使能一个片内外设,窗口狗中断就不会进入. 基本可以排除其他低级错误了,最好是这里的老大们有空试一下这个效果,看是不是真的是芯片的BUG. 当然即使是BUG,也是个很小的BUG,很容易就避开了,只是正好被我碰上吧~ 积分:274 派别: 等级:------ 来自: 2009-06-16,21:58:51 __________________________ 近来爱上STM32了. http://www.daxia.com/stm32/ 资料 邮件 编辑 删除 【5楼】 loongsuns 李阿连 这种问题我在单片机上遇到过,有些寄存器再写的时候有先后顺序,顺序不正确就不工作。我怀疑是有些寄存器在操作的时候会改变其他的寄存器设置,毕竟芯片不是咱设计的不了解。。。。 没人在意估计是别人没遇到过。。 __________________________ ========================================================== 世界上最远的距离不是南极和北极,而是网通和电信。 ========================================================== 积分:534 派别: 等级:------ 来自:西安 2009-06-19,10:05:53 资料 邮件 编辑 删除 【6楼】 unsv 积分:99 派别: 等级:------ 来自: 2009-06-24,11:5楼主说的完全是事实。我试过了!! 资料 邮件 编辑 删除 9:54 【7楼】 unsv 积分:99 派别: 等级:------ 来自: 楼主能发现这个问题 运气很好啊!! RCC_Configuration(); NVIC_Configuration(); 这两个函数之间只要使能任何一个时钟 或者只要初始化GPIO(注:初始化GPIO的mode即可),就可以进入wwdg中断。 ======================================================================================================== 为什么是这样呢?? 不知道 应该也没有人知道 国内 2009-06-24,12:0资料 邮件 编辑 删除 6:15 【10楼】 huike 积分:378 派别: 等级:------ 我的I2C1接AT24CXX可以连续写,等待,连续读,接着再怎么等都不工作了。 STM32片内的外设真够折腾人的。 来自:

2009-06-25,10:1

资料 邮件

编辑 删除

4:31

【11楼】 lut1lut LZ说的情况,我这里没有出现。 积分:2 派别: 等级:------ 来自:

我就是用的FWlib3.0.0中WWDG的例子。只是按照LZ说的那样,把RCC_Config中的使能外设时钟都去掉,RCC_Config后直接就是NVIC_Config,然后才是使能GPIO时钟,以及配置GPIO。

无论调试状态还是脱机运行,运行正常,能够进入WWDG ISR,里面有toggle LED。

在调试WDG之类的外设时,需要注意的是:

1).调试时,在某个地方设置断点,比如我在WWDG的early wakeup ISR设置断点,(就是当counter的值=0x40时);在该ISR中,我toggle某个LED。要想调试时,能在该断点停下,需要设置DBG --> DBG_WWDG_STOP,可以在调试界面直接修改寄存器的值。否则断点停下来了,watchdog还在运行,用户看不到断点停下来的时候,就跑飞了。

2).在调试和watdog以及DMA相关的程序时,板子一上电,如果BOOT开关拨到从flash启动的。那么程序就开始跑起来,里面有watchdog,DMA的运行,可能会使得调试器不能把新程序再次下载到板子中。

一般的措施是,把BOOT开关拨到ram启动,然后给板子上电,这样内部程序不会自己跑起来,不影响调试器下载新程序。

但是!这个措施是针对FWLib2.0.3之前的。为什么呢?老的基于FWlib2.0.3及以前版本的例程中,NIVC_Config中,都有“NVIC_SetVectorTable(0x08000000, 0);”这句话,来指定异常/中断矢量表放在哪里。

而新的FWLib3.0.0的例程库中,NIVC_Config中没有这句,那么芯片会根据BOOT开关的启动方式,来作为异常/中断向量表放的地方。如果按照以上措施,把BOOT开关拨到ram,那么一旦中断发生了,就回到ram中取中断ISR的入口值,显然拿不到,这样程序就跑飞了。

不过没有关系,为了方便用户使用,新的FWlib3.0.0库,保留了\"NVIC_SetVectorTable();\"这个函数。不过不在中了,而是在中。只要用户在项目中包含了这个文件,就可以像以前一样,自己指定向量表在哪里了。这样的话,即使BOOT开关拨到ram启动,也没有关系。

以上是针对IAR的开发环境。好像KEIL的话,BOOT开关必须要跟linker file匹配。即使用户设置了\"NVIC_SetVectorTable();\"也没用。 2009-06-25,10:4资料 邮件 编辑 删除 9:32 【12楼】 lut1lut To:10楼huike 积分:2 派别: 等级:------ 来自: I2C的使用,有些技巧,可以参考21ic上资料 http://bbs.21ic.com/upfiles/img/20093/2009318145734823.zip 2009-06-25,11:0资料 邮件 编辑 删除 6:19 【13楼】 hhh_ccboy 电子白菜 一段时间没来看看,原来还是有人关注的. lut1lut 用的是IAR?我用的是MDK,不过理论上应该和编译器无关吧. 关于看门狗中断进不了的判断,我也是有一个灯的,而且调试中,只要进入一次,灯就会亮,并且没有灭的程序.所以我的实验是可以充分证明系统没有进窗口狗中断的. 后来什么都不变,只把初始化GPIO放前面,就一切正常了~ lut1lut 同志的情况不知道是不是因为不同批次的芯片而不同呢?我的是103VC.还没有机会去深入试N种系列,因为这个问题也并不是什么大问题,自己知道有这么 一回事就好了呵呵. 积分:274 派别: 等级:------ 来自: __________________________ 近来爱上STM32了. http://www.daxia.com/stm32/ 2009-07-03,14:30:02 说不定再拿一批芯片回来就没有这个BUG了~ 资料 邮件 编辑 删除 【14楼】 __STM32__ 积分:720 派别: 等级:------ 来自: 如果楼主说的问题确实存在,应该是逻辑设计的问题,而逻辑设计的问题与批次无关。 理论上与编译器的关系较大,有可能因为优化的需要,编译器改变了指令的执行顺序。 哈哈,我的分析与13楼的结论刚好相反。 2009-07-03,14:4资料 邮件 编辑 删除 7:27 【17楼】 conter GPIO初始化后是不是要过一会才能向IO写数据的? 积分:35 派别: 等级:------ 来自: 我的顺序是: RCC_Config(); //时钟初始化 LcdInit(); //液晶屏初始化 NVIC_Config(); //中断向量表初始化 3.1的库,结果是写屏的时候,居然少写了一个字,但是我单步执行的时候,又全显示出来了.....

因篇幅问题不能全部显示,请点此查看更多更全内容