打印

求助:main()函数循环执行,无法进入while(1)循环

[复制链接]
7700|33
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fengye5340|  楼主 | 2013-1-7 18:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这两天在调试STM32F3 DISCOVERY,编译环境解决好了以后,遇到了很多奇怪的问题。
这个问题弄了半天也没解决好,还请各位大侠给予指导一下!非常感谢!

int main(void)
{   
      systeminit();
      LED_Init();
      TFT_Init();
      while(1)
      {
      }
}

正常情况下, systeminit();   LED_Init();      TFT_Init(); 顺序执行一次,然后就进入while(1)循环才对,可现在的问题呢是,程序循环执行 systeminit();   LED_Init();      TFT_Init(); 这三个程序,并没有进入 while(1) 循环,刚开始以为软件问题,重新装了软件,换了电脑也不管用。
      用其他的MCU没有出现过这种问题,很奇怪。
沙发
airwill| | 2013-1-7 23:06 | 只看该作者
不知道楼主用的什么编译器?
我用 Keil MDK 4.6 编译, 结果是:

                  main PROC
;;;1      
;;;2      int main(void)
000000  f7fffffe          BL       systeminit
;;;3      {   
;;;4            systeminit();
;;;5            LED_Init();
000004  f7fffffe          BL       LED_Init
;;;6            TFT_Init();
000008  f7fffffe          BL       TFT_Init
                  |L1.12|
;;;7            while(1)
00000c  e7fe              B        |L1.12|
;;;8            {
;;;9            }
;;;10     }
;;;11     
                          ENDP

可以看到 while 循环是个跳转的自身的指令. 不会出现楼主说到的问题

使用特权

评论回复
板凳
uet_cache| | 2013-1-8 09:08 | 只看该作者
你的BOOT跳对吗?程序应该在800000H地址开始运行,,

使用特权

评论回复
地板
JasonWangFAE| | 2013-1-8 09:22 | 只看该作者
Please check setting of IAR optimizations .

使用特权

评论回复
5
LDTEST| | 2013-1-8 09:31 | 只看该作者
本帖最后由 LDTEST 于 2013-1-8 09:35 编辑

TFT_Init()  导致 单片机复位 或者 卡住?

使用特权

评论回复
6
fengye5340|  楼主 | 2013-1-8 09:32 | 只看该作者
airwill 发表于 2013-1-7 23:06
不知道楼主用的什么编译器?
我用 Keil MDK 4.6 编译, 结果是:

我用的就是KEIL4.6 编译的,以前从来没有出现过这种问题,后来在用的官方的工程文件调试,也出现了这样的情况

使用特权

评论回复
7
fengye5340|  楼主 | 2013-1-8 09:34 | 只看该作者
LDTEST 发表于 2013-1-8 09:31
楼组的情况可能存在, 如果当  TFT_Init();函数 内导致 单片机 复位的时候就会出现楼组所述现象
楼组重点检 ...

这个函数在F0上跑的没有问题,我没有修改任何地方,可以排除这方面的故障

使用特权

评论回复
8
fengye5340|  楼主 | 2013-1-8 09:36 | 只看该作者
uet_cache 发表于 2013-1-8 09:08
你的BOOT跳对吗?程序应该在800000H地址开始运行,,

这个在KEIL设置的,没有问题

使用特权

评论回复
9
LDTEST| | 2013-1-8 09:36 | 只看该作者
函数中间有涉及 F0 和F3  不一致的地方吗?

使用特权

评论回复
10
uet_cache| | 2013-1-8 09:40 | 只看该作者
boot要硬件先选 对,,,不是软件上面配置个初始地址就行的

使用特权

评论回复
11
fengye5340|  楼主 | 2013-1-8 09:42 | 只看该作者
LDTEST 发表于 2013-1-8 09:36
函数中间有涉及 F0 和F3  不一致的地方吗?

我现在仅改了端口,其它的都没有动

使用特权

评论回复
12
fengye5340|  楼主 | 2013-1-8 09:43 | 只看该作者
uet_cache 发表于 2013-1-8 09:40
boot要硬件先选 对,,,不是软件上面配置个初始地址就行的

F303VCT6,板子是默认配置的,我没有修改硬件,默认是从FLASH启动的

使用特权

评论回复
13
LDTEST| | 2013-1-8 09:48 | 只看该作者
fengye5340 发表于 2013-1-8 09:42
我现在仅改了端口,其它的都没有动

可能有些地方不同,看下参考手册,
没用过F3  不敢断言
就 F0 和F1 F4 以及 F1的 103 和 105  107 systeminit 是不同的

使用特权

评论回复
14
uet_cache| | 2013-1-8 09:50 | 只看该作者
不行就新建工程,里面写些最简单的C语句试试。。

使用特权

评论回复
15
fengye5340|  楼主 | 2013-1-8 10:05 | 只看该作者
uet_cache 发表于 2013-1-8 09:50
不行就新建工程,里面写些最简单的C语句试试。。

谢谢楼主,这些都试过了,问题就是那样了,纠结

使用特权

评论回复
16
IJK| | 2013-1-8 10:16 | 只看该作者
STM32F3 DISCOVERY 记得ST官方有不少例程,支持IAR、Keil 等等编译器。
建议先用官方的例程 跑起来。

使用特权

评论回复
17
看见未来| | 2013-1-8 11:36 | 只看该作者
int main(void)
main函数定义有返回值,但是程序里没有,
后面加个
return(0);
试试。

使用特权

评论回复
18
fengye5340|  楼主 | 2013-1-8 12:47 | 只看该作者
IJK 发表于 2013-1-8 10:16
STM32F3 DISCOVERY 记得ST官方有不少例程,支持IAR、Keil 等等编译器。
建议先用官方的例程 跑起来。 ...

今天用官网提供的例程好好测试了一下板子,下载程序后,还是有问题,现在确认是芯片本身的问题了

使用特权

评论回复
19
明月小厨| | 2013-1-8 13:00 | 只看该作者
TFT_Init();要确定有没有从这个函数出来过?

while(1);要确定有没有执行到这里;
如果上面二个你有确定的判断结果,就不会提上面的问题了;
你肯定没判断清楚.

基本的调试方法楼主不熟悉;多做些项目就熟悉了;兵来将挡,一个一个击破;

使用特权

评论回复
20
明月小厨| | 2013-1-8 13:01 | 只看该作者
会不会是你的调试器太次了;动不动就掉线;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

454

帖子

11

粉丝