OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 11720|回复: 7

同程序,同板子,结果却不同。

[复制链接]

15

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
138
金钱
138
注册时间
2012-3-3
在线时间
0 小时
发表于 2012-3-3 14:04:10 | 显示全部楼层 |阅读模式
我用相同的流水灯程序,在不同的工程环境里面编译,然后下载到同一个 STM 32 的开发板上面,结果,跑流水灯的速度却不一样?
这是为什么呀?求高手,牛人,解答?
万分感谢。以下是程序。


#include "stm32f10x.h"

#define RCC_GPIO_LED                    RCC_APB2Periph_GPIOF    /*LED使用的GPIO时钟*/
#define LEDn                            4                       /*神舟III号LED数量*/
#define GPIO_LED                        GPIOF                   /*神舟III号LED灯使用的GPIO组*/

#define DS1_PIN                         GPIO_Pin_6              /*DS1使用的GPIO管脚*/
#define DS2_PIN                         GPIO_Pin_7              /*DS2使用的GPIO管脚*/
#define DS3_PIN                         GPIO_Pin_8              /*DS3使用的GPIO管脚*/
#define DS4_PIN                         GPIO_Pin_9              /*DS4使用的GPIO管脚*/

GPIO_InitTypeDef GPIO_InitStructure;

u8 count=0;


void Delay(vu32 nCount);     //延时函数。定义在文件末尾部分。
void Turn_On_LED(u8 LED_NUM);  //点亮一个LED灯的函数,定义在文件末尾部分。



/*******************************************************************************
* Function Name : main
* Description   : Main program.
* Input         : None
* Output         : None
* Return         : None
*******************************************************************************/
int main(void)
{


    RCC_APB2PeriphClockCmd(RCC_GPIO_LED, ENABLE); /*使能LED灯使用的GPIO时钟*/

    GPIO_InitStructure.GPIO_Pin = DS1_PIN|DS2_PIN|DS3_PIN|DS4_PIN; //定义待设置的GPIO管脚。 
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置选中管脚的模式为,推挽输出。
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置选中管脚的速率。
  
    GPIO_Init(GPIO_LED, &GPIO_InitStructure);  /*GPIO口初始化*/
    GPIO_SetBits(GPIO_LED,DS1_PIN|DS2_PIN|DS3_PIN|DS4_PIN);/*关闭所有的LED指示灯.*/

    while(1)
    {   
        GPIO_SetBits(GPIO_LED,DS1_PIN|DS2_PIN|DS3_PIN|DS4_PIN);/*关闭所有的LED指示灯*/
        Turn_On_LED(count%4);   //点亮一个LED灯     
        count++;
        Delay(0x2FFFFF);
    }
  
}

/*点亮对应灯*/
void Turn_On_LED(u8 LED_NUM)
{
    switch(LED_NUM)
    {
        case 0:
          GPIO_ResetBits(GPIO_LED,DS1_PIN);  /*点亮DS1灯。*/
          break;
        case 1:
          GPIO_ResetBits(GPIO_LED,DS2_PIN);  /*点亮DS2灯*/
          break;
        case 2:
          GPIO_ResetBits(GPIO_LED,DS3_PIN);  /*点亮DS3灯*/
          break;
        case 3:
          GPIO_ResetBits(GPIO_LED,DS4_PIN);  /*点亮DS4灯*/
          break;          
        default:
          GPIO_ResetBits(GPIO_LED,DS1_PIN|DS2_PIN|DS3_PIN|DS4_PIN); /*点亮所有的灯*/
          break;
    }
}

void Delay(vu32 nCount)
{
  for(; nCount != 0; nCount--);
}
Good?good?study,day?day?up.?立志成为牛人。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165538
金钱
165538
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-3-3 15:08:52 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

15

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
138
金钱
138
注册时间
2012-3-3
在线时间
0 小时
 楼主| 发表于 2012-3-3 15:25:02 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
高手,好眼力。是神舟的代码。但是,我自己新建一个工程用 v3.5.0 的固件库,编译后,下到神舟的板子里面,流水灯的速度就和 神舟自带工程里面的不一样,要慢一些。很明显,肉眼就能看出来差别。求解答。谢谢。
Good?good?study,day?day?up.?立志成为牛人。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165538
金钱
165538
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-3-3 21:43:25 | 显示全部楼层
回复【3楼】fanyi:
---------------------------------
时钟频率不一样了吧.你初始化的时候.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

15

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
138
金钱
138
注册时间
2012-3-3
在线时间
0 小时
 楼主| 发表于 2012-3-4 11:03:16 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
应该一样吧,我把自己新建的工程的 startup_stm32f10x_hd.s,stm32f10x_rcc.c,system_stm32f10x.c 这三个文件全部都替换成和神舟的例子工程一样的文件了,但是,速度还是不同。唉。。。。。。不知道怎么回事。?
Good?good?study,day?day?up.?立志成为牛人。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165538
金钱
165538
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-3-4 12:44:00 | 显示全部楼层
软件仿真,看寄存器,看看每个代码的系统时钟是多少?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

13

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2011-11-9
在线时间
0 小时
发表于 2012-3-4 20:00:31 | 显示全部楼层
回复【5楼】fanyi:
---------------------------------
很好理解啊,不同的编译器对同一条C代码生成的汇编语言有可能不同,同一编译器在不同优化条件下生成的汇编代码也有可能不同,查一下汇编代码就知道了。汇编指令的数目肯定不同。
要实现精确定时,需要 SYSTICK 中断。
www.armrunc.com
回复 支持 反对

使用道具 举报

15

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
138
金钱
138
注册时间
2012-3-3
在线时间
0 小时
 楼主| 发表于 2012-3-9 12:00:33 | 显示全部楼层
多谢楼上的各位了。可能是 汇编代码 不同吧。小弟在此谢过大家了。
Good?good?study,day?day?up.?立志成为牛人。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-15 16:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表