реклама на сайте
подробности

 
 
> Разное поведение в отладчике и без него.
tdi@013h
сообщение Apr 28 2012, 14:29
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 8-02-11
Пользователь №: 62 795



Дано: KEIL, плата на stm32f103rb, ULINK2.
Задача: поморгать диодами.
Код:
Код
int main(void)
{
    InitHardware();
    for (;;)
    {
        GPIO_ResetBits(Led_1);
        Wait(25000);
        GPIO_ResetBits(Led_2);
        Wait(25000);
        GPIO_SetBits(Led_1);
        Wait(25000);
        GPIO_SetBits(Led_2);
        Wait(25000);
    }
}

Код
void Wait(int Count)
{
    for(; Count !=0; Count--);
}


Когда расставляю брэйкпоинты по телу фона и хожу в отладчике по шагам, то все моргает в нужной последовательности.
Когда отключаю дебаггер, делаю ресет и запускаю, то оба диода просто горят.
Что я делаю не так? И почему так происходит?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ViKo
сообщение May 3 2012, 04:40
Сообщение #2


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Продолжение экспериментов. Исходный код:
Код
#define DELAY(TIME) for (volatile uint32_t i = (24000000 / 4 * TIME); i--; )
uint32_t cnt;
int32_t main(void)
{
  __nop;
  while (1) {
    cnt++;
    __nop; __nop; __nop;
    DELAY(0.001);
  }
}

Компилируется в следующий, при -O1 (при -O0 появляется одна команда NOP)
Код
;;;94     int32_t main(void)
000000  4a16              LDR      r2,|L1.92|
;;;95     {
;;;96       __nop;
;;;97       while (1) {
;;;98         cnt++;
;;;99         __nop; __nop; __nop;
;;;100        DELAY(0.001);
000002  f2417370          MOV      r3,#0x1770
                  |L1.6|
000006  6810              LDR      r0,[r2,#0]           ;98 ; cnt
000008  1c40              ADDS     r0,r0,#1             ;98
00000a  6010              STR      r0,[r2,#0]           ;98 ; cnt
00000c  4619              MOV      r1,r3
                  |L1.14|
00000e  0008              MOVS     r0,r1
000010  f1a10101          SUB      r1,r1,#1
000014  d1fb              BNE      |L1.14|
000016  e7f6              B        |L1.6|
;;;101      }
;;;102    }

Как!? Как это согласуется с цитатой из помощи:
Цитата
__nop
This intrinsic inserts a NOP instruction or an equivalent code sequence into the instruction stream generated by the compiler. One NOP instruction is generated for each __nop intrinsic in the source.

The compiler does not optimize away the NOP instructions, except for normal unreachable code elimination. The __nop intrinsic also acts as a barrier for instruction scheduling in the compiler. That is, instructions are not moved from one side of the NOP to the other as a result of optimization.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- tdi@013h   Разное поведение в отладчике и без него.   Apr 28 2012, 14:29
- - mdmitry   Цитата(tdi@013h @ Apr 28 2012, 18:29) Код...   Apr 28 2012, 14:53
|- - tdi@013h   Цитата(mdmitry @ Apr 28 2012, 17:53) Как ...   Apr 30 2012, 02:09
|- - Сергей Борщ   QUOTE (tdi@013h @ Apr 30 2012, 05:09) пер...   Apr 30 2012, 08:44
- - scifi   Цитата(tdi@013h @ Apr 28 2012, 18:29) Ког...   Apr 28 2012, 14:57
|- - Сергей Борщ   QUOTE (scifi @ Apr 28 2012, 17:57) Компил...   Apr 29 2012, 17:03
- - toweroff   задержки а-ля for(i=0;i<NEED_SIZE;i++) в отдел...   Apr 30 2012, 19:16
- - ViKo   У меня в Keil задержки в виде #define Delay(TIME)...   Apr 30 2012, 20:37
|- - Dog Pawlowa   Цитата(ViKo @ Apr 30 2012, 23:37) У меня ...   May 1 2012, 01:50
||- - ViKo   Цитата(Dog Pawlowa @ May 1 2012, 04:50) Ч...   May 1 2012, 06:25
|||- - Сергей Борщ   QUOTE (ViKo @ May 1 2012, 09:25) Просто К...   May 1 2012, 18:29
||- - toweroff   Цитата(Dog Pawlowa @ May 1 2012, 05:50) Ч...   May 1 2012, 15:24
|- - aaarrr   Цитата(ViKo @ May 1 2012, 00:37) У меня в...   May 1 2012, 20:06
- - ViKo   Результаты экспериментов с Keil 4.50 следующие. Ци...   May 2 2012, 08:19
- - ViKo   Ох, дал маху! Крутил-вертел эти __nop - выкид...   May 3 2012, 08:19


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 4th August 2025 - 21:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.01366 секунд с 7
ELECTRONIX ©2004-2016