IAR编译错误

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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\stm
32f10x_vector.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 测试工程模板,并把 i2c24c16.c i2c24c16.h 添加到IAR的工程中,也把 stm32f10xi2c.c 添加到工程了,但
来自
编译的时候一 ...
stm32f10x_conf.h这是工程的一部分,也要复制过来。

如果使用了中断,stm32f10x_it.c和
stm32f10x_vector.c也要复制过来。

[本帖最后由 __stm32f100__ 于 2009-2-15 15:50 编
辑]
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;
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)
{
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.
如果我在stm
32f10x_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
yanyu_stm32银牌盟友
6楼
发表于 2009-2-12 14:09 | 只看该作者
还有一种可能:是不是我的变量声明有问题。

我在main.c中,声明了全局变量:
u32 sendtime;
u32 b1;
u32 b2;
在中声明的外部变量:
extern u32 sendtime;
目的是想中断程序能够使用main.c中的sendtime变量,
不知道这样的声明方式是否正确?
思蜕盟淘宝销售处——迷你打铁铺!豆皮、松鼠开发板、仿真器、STM32全系芯片!欢迎光临!
binglin8楼
思蜕盟后

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

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

在仿真时看不到变量的值,是很正常的事,记住C是编译程序,它
不是解释性语言。

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

回复引用
报告道具
TOP
catwill
金牌盟友
9楼
发表于 2009-2-12 15:10 | 只看该作者
以前也怀疑过keil C51……
后来研究keil的反汇编,
才发现它比我聪明多了……
砖家级的水准……
回复引用
报告道具 TOP
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
__stm32f100__
银牌盟友
来自
14楼
发表于 2009-2-12 18:01 | 只看该作者原帖由catwill于 2009-2-12 15:11 发表
借个地方请教一下:
IAR中如何自定义关键字?
比如
typedef unsigned char uint8 ;
如何让uint8 高亮/特殊颜色显示??
自定义关键字。

02.JPG (28.86 KB)
AVR、MSP430、CC8051 、STM32 and STM8 …………
思蜕盟淘宝销售处——迷你打铁铺!豆皮、松鼠开发板、仿真器、STM32全系
芯片!欢迎光临!
回复引用
catwill
金牌盟友
15楼
发表于 2009-2-12 21:48 | 只看该作者
谢谢楼上的~~~
其实研究了一个下午的IAR手册,还是自己搞定了……
需要自己建立个TXT文档!
不过无限鄙视自己的E文实力……
说实在的,我人生的一半就毁在这该死的E文上
了……
砖家级的水准……
回复引用
报告道具 TOP
yanyu_stm32
16楼
发表于 2009-2-13 10:27 | 只看该作者
今天程序测试已经通过了,结果如下:
1.许多变量不知道为什么无法监测到,无论是STEP运行还是用BREAK 都一样,监视到的值始终是0。

但程序运行的输出结果是正确的。

2.定义成
vu32类型的变量在本程序中的确不能直接用,
先赋值给一个
u32变量再用就OK 了。

目前我还没搞清楚原因。

3.许多语句在汇编窗口中看似跳过了,
实际上不是被
编译
器优化掉了,
就是赋值已经在上面的语句中完成了,不会影响结果的。

总结:主要是我对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 电子白菜
积分:274
派别:
等级:------
来自:今天试用窗口看门狗,本来是件很简单的事情,刚试的时候当然为了简单,就设置了在窗口中断中喂狗.后来发现,中断一直没有进入,结果系统不停复位.--已经确定是没有进中断.所以别问我中断函数是否有合理初始化.
当时,我的硬件初始化是这样的:
//初始化时钟源
RCC_Configuration();
//NVIC
NVIC_Configuration();
//初始化GPIO
GPIO_Configuration();
以上是CPU进入MAIN函数就调用的初始化(3.0的库)--初始化硬件之后的代码,我们先忽略.
RCC_Configuration();中我还初始化了SYSTICK的中断.
NVIC_Configuration();中,我初始化窗口狗的中断.
好了,就是这个初始化代码,我觉得都没什么问题,但窗口看门狗中断就死活没进.以为是其他问题吧,搞来搞去,最后折腾了1小时.试的没什么好试了,就把初始化代码改改顺序:
//初始化时钟源
RCC_Configuration();
//初始化GPIO
GPIO_Configuration();
//NVIC
NVIC_Configuration();
注意到,我其他代码是没有变的,这时候能进窗口狗中断了!WHY?我以为是不是GP IO上有些东西要弄?但后来看来看去,我的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了.
/stm32/
2009-06-16,20:
02:26
资料邮件编辑删除
【1楼】__STM32 __
积分:720
派别:
等级:------
来自:你的系统里是否使能了其他中断?
初始化GPIO的目的是什么?可以去掉这部分吗?STM32固件库中有一个例子,可供参考。

2009-06-16,21:
30:54
资料邮件编辑删除
【2楼】hhh_ccb oy 电子白菜中断只有两个,一个是RCC初始化的时候利用库函数做了个SYSTICK的中断,第二个就是NVIC_Configuration()里面的窗口狗中断.
初始化GPIO是为了初始化我的按键和输出LED.因为系统至少要用些LED作指示才能知道看门狗是否生效的.
另外你说库里面有例子?不知道是哪里的.
我找过万利之类的板的例子,他们正好是初始化了GPIO再初始化NVIC的,所以没有这个问题.
我现在最希望的是,手上有板的人帮我试试这个效果.明显的就是:先初始化过GPIO(其实重点是至少要有一个片内外设使能),再设置窗口狗中断,就没问题.先设置窗口狗中断,再初始化GPIO,窗口狗中断就不会进去了--就好像没有初始化过NVIC一样~
积分:274
派别:
等级:------来自:__________________________ 近来爱上STM32了.
/stm32/
2009-06-16,21:55:2
1
资料邮件编辑删除
【3楼】hhh_ccboy 电子白菜
积分:274
派别:
等级:------
来自:记着,我说的重点是:
要有一个片内外设使能---例如RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO A, ENABLE),再初始化窗口狗中断,就没问题.
如果先初始化窗口狗中断,再使能一个片内外设,窗口狗中断就不会进入.
基本可以排除其他低级错误了,最好是这里的老大们有空试一下这个效果,看是不是真的是芯片的BUG.
当然即使是BUG,也是个很小的BUG,很容易就避开了,只是正好被我碰上吧~
__________________________
近来爱上STM32了.
/stm32/
2009-06-16,21:58:5
1
资料邮件编辑删除
【5楼】loongsuns 李阿连
积分:534
派别:
等级:------
来自:西安这种问题我在单片机上遇到过,有些寄存器再写的时候有先后顺序,顺序不正确就不工作。

我怀疑是有些寄存器在操作的时候会改变其他的寄存器设置,毕竟芯片不是咱设计的不了解。

没人在意估计是别人没遇到过。

__________________________
==========================================================
世界上最远的距离不是南极和北极,而是网通和电信。

==========================================================
2009-06-19,10:
05:53
资料邮件编辑删除
【6楼】unsv
积分:99
派别:
等级:------
来自:
楼主说的完全是事实。

我试过了!!
2009-06-24,11:
59:54
资料邮件编辑删除
【7楼】unsv 积分:99
派别:
等级:------来自:楼主能发现这个问题运气很好啊!!
RCC_Configuration();
NVIC_Configuration();
这两个函数之间只要使能任何一个时钟或者只要初始化GPIO(注:初始化GPIO 的mode即可),就可以进入wwdg中断。

========================================================================== ==============================
为什么是这样呢??不知道应该也没有人知道国内
2009-06-24,12:
06:15
资料邮件编辑删除
【10楼】huike 积分:378
派别:
等级:------
来自:我的I2C1接AT24CXX可以连续写,等待,连续读,接着再怎么等都不工作了。

STM32片内的外设真够折腾人的。

2009-06-25,10:
14:31
资料邮件编辑删除
【11楼】lut1lu t
积分:2
派别:
等级:------
来自:LZ说的情况,我这里没有出现。

我就是用的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开关拨到从fla sh启动的。

那么程序就开始跑起来,里面有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_SetVectorTa ble();"这个函数。

不过不在<nvic.c>中了,而是在<misc.c>中。

只要用户在项目中包含了这个文件,就可以像以前一样,自己指定向量表在哪里了。

这样的话,即使BOOT 开关拨到ram启动,也没有关系。

以上是针对IAR的开发环境。

好像KEIL的话,BOOT开关必须要跟linker file匹配。

即使用户设置了"NVIC_SetVectorTable();"也没用。

2009-06-25,10:
49:32
资料邮件编辑删除
【12楼】lut1lu t
积分:2
派别:
等级:------
来自:To:10楼huike
I2C的使用,有些技巧,可以参考21ic上资料
/upfiles/img/20093/2009318145734823.zip
2009-06-25,11:
06:19
资料邮件编辑删除
【13楼】hhh_ccboy 电子白菜
积分:274
派别:
等级:------
来自:一段时间没来看看,原来还是有人关注的. lut1lut 用的是IAR?我用的是MDK,不过理论上应该和编译器无关吧.
关于看门狗中断进不了的判断,我也是有一个灯的,而且调试中,只要进入一次,灯就会亮,并且没有灭的程序.所以我的实验是可以充分证明系统没有进窗口狗中断的.
后来什么都不变,只把初始化GPIO放前面,就一切正常了~
lut1lut 同志的情况不知道是不是因为不同批次的芯片而不同呢?我的是103 VC.还没有机会去深入试N种系列,因为这个问题也并不是什么大问题,自己知道有这么一回事就好了呵呵.
说不定再拿一批芯片回来就没有这个BUG了~
__________________________
近来爱上STM32了.
/stm32/
2009-07-03,14:30:0
2
资料邮件编辑删除
【14楼】__STM3 2__
积分:720
派别:
等级:------
来自:如果楼主说的问题确实存在,应该是逻辑设计的问题,而逻辑设计的问题与批次无关。

理论上与编译器的关系较大,有可能因为优化的需要,编译器改变了指令的执行顺序。

哈哈,我的分析与13楼的结论刚好相反。

2009-07-03,14:
47:27
资料邮件编辑删除
【17楼】conter 积分:35
派别:
等级:------
来自:GPIO初始化后是不是要过一会才能向IO写数据的?
我的顺序是:
RCC_Config(); //时钟初始化
LcdInit(); //液晶屏初始化
NVIC_Config(); //中断向量表初始化
3.1的库,结果是写屏的时候,居然少写了一个字,但是我单步执行的时候,又全显示出来了.....
(注:可编辑下载,若有不当之处,请指正,谢谢!)。

相关文档
最新文档