程序编译时出现以下错误,实在不知道是什么原因,特向大家请教! 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();\"这个函数。不过不在 以上是针对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的库,结果是写屏的时候,居然少写了一个字,但是我单步执行的时候,又全显示出来了..... 因篇幅问题不能全部显示,请点此查看更多更全内容