打印

一些奇怪的问题。(因为不知道怎么描述)

[复制链接]
1878|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kyzb001|  楼主 | 2010-11-15 19:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 kyzb001 于 2010-11-16 08:04 编辑

小菜鸟写的I2C读写程序。程序中注释部分为Rx_Data里面的内容。奇怪是就 ,我用注释部分的代码,不用Rx_Data这个调用函数的时候,程序中的红色部分(for循环)能正常输出。但是我不用注释部分代码用,Rx_Data调用函数的时候,红色部分不能输出。应该说。Rx_Data调用完以后下面的代码貌似都没运行。就想在Rx_Data后面加了个while(1);
这个为用Rx_调用函数的输出:ARM Cortex-M0 UART0                0       1       2       3       4       5       6       7       8       9       a       b       c       d       e       f       10       11       12       13       14       15       16       17       18       19       1a       1b       1c       1d       1e       1f     The Rx is over result is:  

这个是用注释部分不用调用函数输出的结果:|          芯唐ARM Cortex-M0 UART0演示程序                0       1       2       3       4       5       6       7       8       9       a       b       c       d       e       f       10       11       12       13       14       15       16       17       18       19       1a       1b       1c       1d       1e       1f     The Rx is over result is:  |          已经读取完毕:现在进入输出打印阶段             0    1    2    3    4    5    6    7    8    9    a    b    c    d    e    f    10    11    12    13    14    15    16    17    18    19    1a    1b    1c    1d    1e    1f  

菜鸟经验缺乏,请教一下大家为什么。有可能是什么原因。或者怎么去检测。
感谢大家乐
/* Copyright(c) 2009 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/
#include <stdio.h>
#include "NUC1xx.H"
#include "Driver\DrvGPIO.h"
#include "Driver\DrvI2C.h"
#include "Driver\DrvSYS.h"
#include "Driver\DrvUART.h"
uint32_t Rx_code[]={0};
int32_t Tx_Code[]={12,32,12,3,213,5,4,12,51,1,31,23};
int32_t Rx_Data( )
{
        uint8_t i=0;
        int32_t sData[]={0};
        DrvGPIO_InitFunction(E_FUNC_I2C0);
        DrvI2C_Open(I2C_PORT0,100000);
        for(i = 0; i < 32; i++)
       {
  
             DrvI2C_Ctrl(I2C_PORT0 , 1 , 0 , 0 , 0 );

             while(I2C0->CON.SI==0);
             I2C0->DATA=0XA0;
             DrvI2C_Ctrl(I2C_PORT0 , 0 , 0 , 1 , 0 );
  
             while(I2C0->CON.SI==0);
             I2C0->DATA=0x00+i;
             DrvI2C_Ctrl(I2C_PORT0 , 0 , 0 , 1 , 1 );

             while(I2C0->CON.SI==0);
             DrvI2C_Ctrl(I2C_PORT0 , 1, 0 , 1 , 0);

             while(I2C0->CON.SI==0);
             I2C0->DATA=0XA1;
             DrvI2C_Ctrl(I2C_PORT0 , 0, 0 , 1 , 0);
             DrvSYS_Delay(150);

             while(I2C0->CON.SI==0);
             DrvI2C_Ctrl(I2C_PORT0 , 0, 0 , 1 , 0);
             while(I2C0->CON.SI==0);
             sData=DrvI2C_ReadData(I2C_PORT0);
             DrvI2C_Ctrl(I2C_PORT0 , 0 , 1 , 1 , 0);
}
             DrvI2C_Close(I2C_PORT0);
             DrvSYS_Delay(10000);
      for(i = 0; i < 32; i++)
      {
             Rx_code=sData;
             printf("     %x  ",Rx_code);
       }
       printf("   The Rx is over result is:  ");

       return 0;
}
void Tx_UART(uint32_t Uart0_Flag)
{
       uint8_t bInChar[1] = {0x55};
       DrvUART_Write(UART_PORT0,bInChar,1);
}
int32_t main (void)
{
     uint8_t i=0;
//  uint8_t i=0;
     int32_t sData[]={0};
     unsigned char Title1[] = {"|          芯唐ARM Cortex-                                          M0UART0演示程序           "};
      unsigned char Title2[] = {"|          已经读取完毕:现在进 入输出打印阶段           "};
      //串口初始化
                                                                                                                                                                                            DrvUART_EnableInt                                                            (UART_PORT0 ,DRVUART_RDAINT,Tx_UART );
        DrvUART_Write(UART_PORT0,Title1,sizeof(Title1)-1);
        //Tx_Data();
        Rx_Data();
/*这个地方如果不用Rx_Data的话(吧Rx_Data里面的代码复制带这个位置),下面都能输出,但是用RX_Data就不能输出了*/
        printf("   The Rx is over result is:  ");
        DrvUART_Write(UART_PORT0,Title2,sizeof(Title2)-1);
        for(i = 0; i < 32; i++)
               printf("  %x  ", Rx_code
);
        while(1);
}

菜鸟写的I2C读写程序。程序中注释部分为Rx_Data里面的内容。奇怪是就 我用注释部分的代码,不用Rx_Data这个调用函数的时候程序中的红色部分(for循环)能正常输出。但是叫我不用注释部分代码用Rx_Data调用函数的时候,红色部分不能输出。应该说。Rx_Data调用完以后下面的代码貌似都没运行。就想在Rx_Data后面加了个while(1);
这个为用Rx_调用函数的输出:ARM Cortex-M0 UART0                0       1       2       3       4       5       6       7       8       9       a       b       c       d       e       f       10       11       12       13       14       15       16       17       18       19       1a       1b       1c       1d       1e       1f     The Rx is over result is:  

这个是用注释部分不用调用函数输出的结果:|          芯唐ARM Cortex-M0 UART0演示程序                0       1       2       3       4       5       6       7       8       9       a       b       c       d       e       f       10       11       12       13       14       15       16       17       18       19       1a       1b       1c       1d       1e       1f     The Rx is over result is:  |          已经读取完毕:现在进入输出打印阶段             0    1    2    3    4    5    6    7    8    9    a    b    c    d    e    f    10    11    12    13    14    15    16    17    18    19    1a    1b    1c    1d    1e    1f  

菜鸟经验缺乏,请教一下大家为什么。有可能是什么原因。或者怎么去检测。
感谢大家乐

相关帖子

沙发
kyzb001|  楼主 | 2010-11-15 19:33 | 只看该作者
自己先顶一个

使用特权

评论回复
板凳
kyzb001|  楼主 | 2010-11-15 20:18 | 只看该作者
话说,没事就顶顶。

使用特权

评论回复
地板
hotpower| | 2010-11-15 21:25 | 只看该作者
没看见红色呀,太长有些晕

使用特权

评论回复
5
sinadz| | 2010-11-15 21:59 | 只看该作者
这个描述的确是有点乱

使用特权

评论回复
6
kyzb001|  楼主 | 2010-11-16 08:02 | 只看该作者
简单的貌似就是,一段代码,我吧他打包成调用函数的话,调用完他后下面的代码好像都不执行。不打包的话就没事。

使用特权

评论回复
7
kyzb001|  楼主 | 2010-11-16 12:44 | 只看该作者
果断自己顶

使用特权

评论回复
8
hotpower| | 2010-11-16 12:54 | 只看该作者
改为全局变量

使用特权

评论回复
9
gxgclg| | 2010-11-16 14:23 | 只看该作者
可能是全局变量的问题

使用特权

评论回复
10
kyzb001|  楼主 | 2010-11-16 15:22 | 只看该作者
sData 这个变量  要是改成全局变量,读不出结构。  i  这个循环变量该成全局变量。在优化代码为l0 是为输出一行, 为系统默认是循环输出。

使用特权

评论回复
11
kyzb001|  楼主 | 2010-11-16 15:23 | 只看该作者
现在该了一些设置后, 运行Rx_Data里后,不会继续运行代码而是 重新执行main函数。

使用特权

评论回复
12
hotpower| | 2010-11-16 15:50 | 只看该作者
晕,把工程打包上传,可能有人找出原因…

使用特权

评论回复
13
kyzb001|  楼主 | 2010-11-16 18:01 | 只看该作者
test.rar (495.16 KB) 写是我今天下午 重新写的。
有点疑惑就是for 循环只能循环2次,第二次的时候 程序执行到ReadBtyEeprom 的最后一句print时候就跑飞了。

使用特权

评论回复
14
kyzb001|  楼主 | 2010-11-16 18:03 | 只看该作者
灰常感谢大家。

使用特权

评论回复
15
baidudz| | 2010-11-16 21:56 | 只看该作者
先下载下来看看,发现问题再给楼主回复

使用特权

评论回复
16
kyzb001|  楼主 | 2010-11-17 07:47 | 只看该作者
谢谢,早上起来自己顶顶。

使用特权

评论回复
17
kyzb001|  楼主 | 2010-11-17 09:31 | 只看该作者
非常感谢大家的关注, 我已经解决了。 由于指针出了问题,导致程序跑飞。

使用特权

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

本版积分规则

15

主题

623

帖子

1

粉丝