码迷,mamicode.com
首页 > 其他好文 > 详细

基于FPGA的DW8051移植(三)

时间:2014-12-05 12:29:30      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   ar   color   sp   for   文件   数据   

  总结一下问题:

  1) http://www.cnblogs.com/sepeng/p/4137405.html  基于FPGA的DW8051移植(一)里面用modelsim观测波形发现程序进入了idata区间初始化循环中跳转不出来,没有进入用户程序这一块。

  2) http://www.cnblogs.com/sepeng/p/4141072.html 基于FPGA的DW8051移植(二)里面将idata区间初始化去掉,程序进入了用户程序却发现在执行DelayMs 函数的时候,循环执行完毕,在最后跳转回主函数main的时候居然跳进了for循环。

 

这一篇我将会去掉for循环再追查核的执行情况

 1 #include <reg51.h>
 2 #define uchar unsigned char 
 3 #define uint unsigned int 
 4 
 5 sbit LED = P0^0 ; 
 6 
 7 void DelayMS (uint x )
 8 {
 9     //uchar i ; 
10     while (x--);
11     //{
12         //for (i=0;i<2;i++) ;
13         
14     //}
15 }
16 
17 void main ()
18 {
19    LED = 1 ; 
20    while (1) 
21     {
22      
23         DelayMS(5);
24         LED=~LED ;
25     }
26 }

这一次的执行情况依据keilC里面的调试,执行地址顺序应该是

00 01 02 --> 1B 1C 1D --> 1E 1F 20(头文件执行完成)

-->(进入主函数) 03 04 --> 05 06 --> 07 08 --> 09 0A 0B(开始向子函数转跳

-->(进入子函数)10 -->11 --> 12 13 --> 14 15 ()--> 17 --> 18 19 -->(跳回子函数循环

   10 .....(这里循环五次)

       --> (最后一次)10 --11 -->12 13 --> 14 15 --> 16 --> 17 --> 18 19 --> 1A(子函数执行完毕)

--> (回到主函数) 0C 0D --> 0E 0F --> 05 06 --> 07 08 --> 09 0A 0B (向子函数跳转)

--> ...............循环
  

  在modelsim中看到指令执行错误,上面红色字体的地方执行错误,错误方式就是每次多读了一个数据。

        正常 :09 0A 0B(开始向子函数转跳)   实际 : 09 0A 0B 0C 

            正常 : 14 15 ()                            实际 : 14 15 16

        正常 :18 19 -->(跳回子函数循环)    实际 : 18 19 1A

  这三个地方有一个共同的特点就是需要跳转。

  

  

  

 

  既然如此就第三次回避(第一次回避memory初始化loop,第二次回避for )修改C程序如下,回避子函数的转跳行为

 1 #include <reg51.h>
 2 
 3 sbit LED = P1^0 ; 
 4 
 5 
 6 void main ()
 7 {
 8    LED = 1 ; 
 9 
10    while (1) 
11         LED=~LED ;
12 
13 }

 可是这主函数main里面必须要有一个循环啊,所以loop还是无法避免,最终的地址跳转为

00 01 02 --> 03 04 05  --> 06 07 08  (初始化运行完毕)

(进入主函数)09 0A --> 0B 0C --> 0D 0E (主函数运行完毕) 

(循环)0B 0C --> 0D 0E (循环) 

从modelsim中看到这个核运行的情况是 

bubuko.com,布布扣

每次跳转的前一个时刻0D 0E 都执行成0D 0E 0F 。就是多执行了一条语句,语句地址0F

 

在让我们看看我关心已久的sfr

bubuko.com,布布扣

前面的01 81 00 我真是醉了,81可是P0^1啊,无法解释,后面的90 倒是符合期望,问题又来了,这个data_out 怎么又不听话了呢?

抓狂,核你到底怎么了

 

基于FPGA的DW8051移植(三)

标签:style   blog   http   ar   color   sp   for   文件   数据   

原文地址:http://www.cnblogs.com/sepeng/p/4143483.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!