Перейти к содержанию
    

STM32F334 медленное исполнение?

Доброго дня,

Есть вот такой простой код, который суммирует данные с АЦП для последующей обработки. Частота ядра 72МГц. По факту, с помощью осциллографа, выяснилось, что этот кусок исполняется за примерно 2,6мкс, что кажется непомерно долгим для таких простых операций (в зависимости от условий выполняются отдельные ветви). GCC (Arduino).

Может быть, что суммирование идет в 64битное целое вызывает проблему?

Спасибо.

Spoiler
inline void countiu () {
  if (b_voltamp == 1 ) {                    //Current calculations for current control
    if (u8_p == 2) {
      u64_tempin += i32_ADCcor[0];
      u32_countin++;                        //Number of negative currents
      u32_countipn++;                       //Number of negative and positive currents
    }
    if (u8_p == 1) {
      u64_tempip += i32_ADCcor[0];
      u32_countip++;                        //Number of positive currents
      u32_countipn++;                       //Number of negative and positive currents
    }
  } else if (b_voltamp == 0) {              //Current calculations for voltage control
    if (u8_p == 2) {                        //It is not for correction, only for chronograms
      u64_tempin2 += i32_ADCcor[0];
    }
    if (u8_p == 1) {
      u64_tempip2 += i32_ADCcor[0];
    }
  }
  u32_countipnp++;                          //Number of total times for averaging chronogram data

  if (b_inject) {                           //Calculation of injected charge separately
    u64_tempQinj += i32_ADCcor[0];
    u32_countQinj ++; 
  }

  if (!b_diag_flag && !b_inject && !b_DontVoltage) {          //Exclude amplitude of diagnostic and injecting pulses from peaks calculation
    if (u8_p == 2) {                        //Negative peak
      if (u16_Umaxn < i32_ADCcor[1]) {        
        u16_Umaxn = (3 * u16_Umaxn + i32_ADCcor[1]) >> 2;
      }
    }
    if (u8_p == 1) {                        //Positive peak
      if (u16_Umaxp < i32_ADCcor[1]) {       
        u16_Umaxp = (3 * u16_Umaxp + i32_ADCcor[1]) >> 2;
      }
    }
  }
    
}

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 минут назад, Alex-lab сказал:

Может быть, что суммирование идет в 64битное целое вызывает проблему?

Видимо: что такое и как объявлена вся эта куча переменных/констант - предлагаете угадывать читателям?

Чтобы узнать что и сколько выполняется, нужно смотреть листинг.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 минут назад, dOb сказал:

У вас очень много условных переходов

Это в каком хрустальном шаре вы такое увидели? Может там везде в выражениях if () - константы, вычисляемые на этапе компиляции?

А тормоза например из-за того, что какая-то из входных переменных - double. И время тратится на double-вычисления. А может на float. Хрустальный шар молчит.  :unknw:

А условных переходов тот код может генерить совсем чуть (даже с переменными в if()). Потому как в Cortex-M-ядрах есть команды условного выполнения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

26 minutes ago, dOb said:

У вас очень много условных переходов, а каждый такой переход сбивает конвейер.

Хм, интересно. То есть получается нужно как можно раньше узнать о нужном ветвлении сразу выбирать ветку целиком. У меня есть четыре параметра: положительный, отрицательный, ток или напряжение. То есть имеет смысл сразу сделать четыре варианта счетчика? А выбирать я могу на самом раннем этапе, оставив лишь один switch вместо ifs?

25 minutes ago, jcxz said:

А тормоза например из-за того, что какая-то из входных переменных - double

Все целочисленное.

33 minutes ago, jcxz said:

как объявлена вся эта куча переменных/констант

Там префиксы показывают. Константы просто числами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

33 минуты назад, Alex-lab сказал:

Хм, интересно. То есть получается нужно как можно раньше узнать о нужном ветвлении сразу выбирать ветку целиком.

Откройте наконец-то листинг! При полной оптимизации у вас там ветвлений должно быть с гулькин нос. Так как бОльшая часть ваших if-ов должна скомпилиться в команды условного выполнения IT.

Если конечно оптимизация включена. И при прочих условиях, которые вы утаиваете.

33 минуты назад, Alex-lab сказал:

Там префиксы показывают.

Что именно показывают? Есть-ли volatile у переменных? у каких? Выровнены ли все эти переменные? и т.д.

PS: Если продолжите играть в угадайку, то толку никакого не будет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну как бы это получается около 187 тактов. Посмотрите ассемблерный листинг. Ну и включите оптимизацию в режим максимальной скорости. Да, оптимизацию  можно настраивать для отдельных функций через атрибуты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, EdgeAligned said:

Посмотрите ассемблерный листинг.

Не уверен, вроде оно? Команд действительно много...

Spoiler
08000518 <countiu()>:
 8000518:	4b46      	ldr	r3, [pc, #280]	; (8000634 <countiu()+0x11c>)
 800051a:	781a      	ldrb	r2, [r3, #0]
 800051c:	b510      	push	{r4, lr}
 800051e:	2a00      	cmp	r2, #0
 8000520:	d036      	beq.n	8000590 <countiu()+0x78>
 8000522:	4c45      	ldr	r4, [pc, #276]	; (8000638 <countiu()+0x120>)
 8000524:	7823      	ldrb	r3, [r4, #0]
 8000526:	2b02      	cmp	r3, #2
 8000528:	d111      	bne.n	800054e <countiu()+0x36>
 800052a:	4a44      	ldr	r2, [pc, #272]	; (800063c <countiu()+0x124>)
 800052c:	4b44      	ldr	r3, [pc, #272]	; (8000640 <countiu()+0x128>)
 800052e:	6818      	ldr	r0, [r3, #0]
 8000530:	e9d2 3100 	ldrd	r3, r1, [r2]
 8000534:	181b      	adds	r3, r3, r0
 8000536:	eb41 71e0 	adc.w	r1, r1, r0, asr #31
 800053a:	e9c2 3100 	strd	r3, r1, [r2]
 800053e:	4a41      	ldr	r2, [pc, #260]	; (8000644 <countiu()+0x12c>)
 8000540:	6813      	ldr	r3, [r2, #0]
 8000542:	3301      	adds	r3, #1
 8000544:	6013      	str	r3, [r2, #0]
 8000546:	4a40      	ldr	r2, [pc, #256]	; (8000648 <countiu()+0x130>)
 8000548:	6813      	ldr	r3, [r2, #0]
 800054a:	3301      	adds	r3, #1
 800054c:	6013      	str	r3, [r2, #0]
 800054e:	7823      	ldrb	r3, [r4, #0]
 8000550:	2b01      	cmp	r3, #1
 8000552:	d111      	bne.n	8000578 <countiu()+0x60>
 8000554:	4a3d      	ldr	r2, [pc, #244]	; (800064c <countiu()+0x134>)
 8000556:	4b3a      	ldr	r3, [pc, #232]	; (8000640 <countiu()+0x128>)
 8000558:	6818      	ldr	r0, [r3, #0]
 800055a:	e9d2 3100 	ldrd	r3, r1, [r2]
 800055e:	181b      	adds	r3, r3, r0
 8000560:	eb41 71e0 	adc.w	r1, r1, r0, asr #31
 8000564:	e9c2 3100 	strd	r3, r1, [r2]
 8000568:	4a39      	ldr	r2, [pc, #228]	; (8000650 <countiu()+0x138>)
 800056a:	6813      	ldr	r3, [r2, #0]
 800056c:	3301      	adds	r3, #1
 800056e:	6013      	str	r3, [r2, #0]
 8000570:	4a35      	ldr	r2, [pc, #212]	; (8000648 <countiu()+0x130>)
 8000572:	6813      	ldr	r3, [r2, #0]
 8000574:	3301      	adds	r3, #1
 8000576:	6013      	str	r3, [r2, #0]
 8000578:	4a36      	ldr	r2, [pc, #216]	; (8000654 <countiu()+0x13c>)
 800057a:	4c37      	ldr	r4, [pc, #220]	; (8000658 <countiu()+0x140>)
 800057c:	6813      	ldr	r3, [r2, #0]
 800057e:	3301      	adds	r3, #1
 8000580:	6013      	str	r3, [r2, #0]
 8000582:	4b36      	ldr	r3, [pc, #216]	; (800065c <countiu()+0x144>)
 8000584:	781b      	ldrb	r3, [r3, #0]
 8000586:	bb13      	cbnz	r3, 80005ce <countiu()+0xb6>
 8000588:	7823      	ldrb	r3, [r4, #0]
 800058a:	2b00      	cmp	r3, #0
 800058c:	d02f      	beq.n	80005ee <countiu()+0xd6>
 800058e:	bd10      	pop	{r4, pc}
 8000590:	781b      	ldrb	r3, [r3, #0]
 8000592:	2b00      	cmp	r3, #0
 8000594:	d1f0      	bne.n	8000578 <countiu()+0x60>
 8000596:	4c28      	ldr	r4, [pc, #160]	; (8000638 <countiu()+0x120>)
 8000598:	7823      	ldrb	r3, [r4, #0]
 800059a:	2b02      	cmp	r3, #2
 800059c:	d109      	bne.n	80005b2 <countiu()+0x9a>
 800059e:	4a30      	ldr	r2, [pc, #192]	; (8000660 <countiu()+0x148>)
 80005a0:	4b27      	ldr	r3, [pc, #156]	; (8000640 <countiu()+0x128>)
 80005a2:	6818      	ldr	r0, [r3, #0]
 80005a4:	e9d2 3100 	ldrd	r3, r1, [r2]
 80005a8:	181b      	adds	r3, r3, r0
 80005aa:	eb41 71e0 	adc.w	r1, r1, r0, asr #31
 80005ae:	e9c2 3100 	strd	r3, r1, [r2]
 80005b2:	7823      	ldrb	r3, [r4, #0]
 80005b4:	2b01      	cmp	r3, #1
 80005b6:	d1df      	bne.n	8000578 <countiu()+0x60>
 80005b8:	4a2a      	ldr	r2, [pc, #168]	; (8000664 <countiu()+0x14c>)
 80005ba:	4b21      	ldr	r3, [pc, #132]	; (8000640 <countiu()+0x128>)
 80005bc:	6818      	ldr	r0, [r3, #0]
 80005be:	e9d2 3100 	ldrd	r3, r1, [r2]
 80005c2:	181b      	adds	r3, r3, r0
 80005c4:	eb41 71e0 	adc.w	r1, r1, r0, asr #31
 80005c8:	e9c2 3100 	strd	r3, r1, [r2]
 80005cc:	e7d4      	b.n	8000578 <countiu()+0x60>
 80005ce:	4a26      	ldr	r2, [pc, #152]	; (8000668 <countiu()+0x150>)
 80005d0:	4b1b      	ldr	r3, [pc, #108]	; (8000640 <countiu()+0x128>)
 80005d2:	6818      	ldr	r0, [r3, #0]
 80005d4:	e9d2 3100 	ldrd	r3, r1, [r2]
 80005d8:	181b      	adds	r3, r3, r0
 80005da:	eb41 71e0 	adc.w	r1, r1, r0, asr #31
 80005de:	e9c2 3100 	strd	r3, r1, [r2]
 80005e2:	4a22      	ldr	r2, [pc, #136]	; (800066c <countiu()+0x154>)
 80005e4:	6813      	ldr	r3, [r2, #0]
 80005e6:	3301      	adds	r3, #1
 80005e8:	6013      	str	r3, [r2, #0]
 80005ea:	7823      	ldrb	r3, [r4, #0]
 80005ec:	e7cf      	b.n	800058e <countiu()+0x76>
 80005ee:	4b20      	ldr	r3, [pc, #128]	; (8000670 <countiu()+0x158>)
 80005f0:	781b      	ldrb	r3, [r3, #0]
 80005f2:	2b00      	cmp	r3, #0
 80005f4:	d1cb      	bne.n	800058e <countiu()+0x76>
 80005f6:	4a10      	ldr	r2, [pc, #64]	; (8000638 <countiu()+0x120>)
 80005f8:	7813      	ldrb	r3, [r2, #0]
 80005fa:	2b02      	cmp	r3, #2
 80005fc:	d10a      	bne.n	8000614 <countiu()+0xfc>
 80005fe:	491d      	ldr	r1, [pc, #116]	; (8000674 <countiu()+0x15c>)
 8000600:	480f      	ldr	r0, [pc, #60]	; (8000640 <countiu()+0x128>)
 8000602:	880b      	ldrh	r3, [r1, #0]
 8000604:	6840      	ldr	r0, [r0, #4]
 8000606:	4283      	cmp	r3, r0
 8000608:	bfbf      	itttt	lt
 800060a:	eb03 0343 	addlt.w	r3, r3, r3, lsl #1
 800060e:	181b      	addlt	r3, r3, r0
 8000610:	109b      	asrlt	r3, r3, #2
 8000612:	800b      	strhlt	r3, [r1, #0]
 8000614:	7813      	ldrb	r3, [r2, #0]
 8000616:	2b01      	cmp	r3, #1
 8000618:	d1b9      	bne.n	800058e <countiu()+0x76>
 800061a:	4a17      	ldr	r2, [pc, #92]	; (8000678 <countiu()+0x160>)
 800061c:	4908      	ldr	r1, [pc, #32]	; (8000640 <countiu()+0x128>)
 800061e:	8813      	ldrh	r3, [r2, #0]
 8000620:	6849      	ldr	r1, [r1, #4]
 8000622:	428b      	cmp	r3, r1
 8000624:	bfbf      	itttt	lt
 8000626:	eb03 0343 	addlt.w	r3, r3, r3, lsl #1
 800062a:	185b      	addlt	r3, r3, r1
 800062c:	109b      	asrlt	r3, r3, #2
 800062e:	8013      	strhlt	r3, [r2, #0]
 8000630:	e7ad      	b.n	800058e <countiu()+0x76>
 8000632:	bf00      	nop
 8000634:	20000032 	.word	0x20000032
 8000638:	2000119a 	.word	0x2000119a
 800063c:	200002d0 	.word	0x200002d0
 8000640:	20000ae8 	.word	0x20000ae8
 8000644:	20000b1c 	.word	0x20000b1c
 8000648:	20000b24 	.word	0x20000b24
 800064c:	200002c8 	.word	0x200002c8
 8000650:	20000b20 	.word	0x20000b20
 8000654:	20000b28 	.word	0x20000b28
 8000658:	200021d6 	.word	0x200021d6
 800065c:	200021d2 	.word	0x200021d2
 8000660:	200002c0 	.word	0x200002c0
 8000664:	200002b8 	.word	0x200002b8
 8000668:	200002b0 	.word	0x200002b0
 800066c:	20000ae4 	.word	0x20000ae4
 8000670:	200021d4 	.word	0x200021d4
 8000674:	20000b80 	.word	0x20000b80
 8000678:	20000b7e 	.word	0x20000b7e

 

 

2 hours ago, jcxz said:

При полной оптимизации у вас там ветвлений должно быть с гулькин нос.

Вообще пробовал все от -Os (2.8мкс) до -O3(2,6мкс). Разница не значительная.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 minutes ago, Alex-lab said:

Вообще пробовал все от -Os (2.8мкс) до -O3(2,6мкс). Разница не значительная.

Ногодрыгом GPIO измеряли? А если длительность __NOP(); так же измерить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 minutes ago, aaarrr said:

Ногодрыгом GPIO измеряли?

Если вы имеете ввиду, что он сам по себе медленный (с чего бы ему?), то вот полна осциллограмма.

 

Picture1.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, Alex-lab сказал:

Не уверен, вроде оно? Команд действительно много...

  Показать контент
08000518 <countiu()>:
 8000518:	4b46      	ldr	r3, [pc, #280]	; (8000634 <countiu()+0x11c>)
 800051a:	781a      	ldrb	r2, [r3, #0]
 800051c:	b510      	push	{r4, lr}
 800051e:	2a00      	cmp	r2, #0
 8000520:	d036      	beq.n	8000590 <countiu()+0x78>
 8000522:	4c45      	ldr	r4, [pc, #276]	; (8000638 <countiu()+0x120>)
 8000524:	7823      	ldrb	r3, [r4, #0]
 8000526:	2b02      	cmp	r3, #2
 8000528:	d111      	bne.n	800054e <countiu()+0x36>
 800052a:	4a44      	ldr	r2, [pc, #272]	; (800063c <countiu()+0x124>)
 800052c:	4b44      	ldr	r3, [pc, #272]	; (8000640 <countiu()+0x128>)
 800052e:	6818      	ldr	r0, [r3, #0]
 8000530:	e9d2 3100 	ldrd	r3, r1, [r2]
 8000534:	181b      	adds	r3, r3, r0
 8000536:	eb41 71e0 	adc.w	r1, r1, r0, asr #31
 800053a:	e9c2 3100 	strd	r3, r1, [r2]
 800053e:	4a41      	ldr	r2, [pc, #260]	; (8000644 <countiu()+0x12c>)
 8000540:	6813      	ldr	r3, [r2, #0]
 8000542:	3301      	adds	r3, #1
 8000544:	6013      	str	r3, [r2, #0]
 8000546:	4a40      	ldr	r2, [pc, #256]	; (8000648 <countiu()+0x130>)
 8000548:	6813      	ldr	r3, [r2, #0]
 800054a:	3301      	adds	r3, #1
 800054c:	6013      	str	r3, [r2, #0]
 800054e:	7823      	ldrb	r3, [r4, #0]
 8000550:	2b01      	cmp	r3, #1
 8000552:	d111      	bne.n	8000578 <countiu()+0x60>
 8000554:	4a3d      	ldr	r2, [pc, #244]	; (800064c <countiu()+0x134>)
 8000556:	4b3a      	ldr	r3, [pc, #232]	; (8000640 <countiu()+0x128>)
 8000558:	6818      	ldr	r0, [r3, #0]
 800055a:	e9d2 3100 	ldrd	r3, r1, [r2]
 800055e:	181b      	adds	r3, r3, r0
 8000560:	eb41 71e0 	adc.w	r1, r1, r0, asr #31
 8000564:	e9c2 3100 	strd	r3, r1, [r2]
 8000568:	4a39      	ldr	r2, [pc, #228]	; (8000650 <countiu()+0x138>)
 800056a:	6813      	ldr	r3, [r2, #0]
 800056c:	3301      	adds	r3, #1
 800056e:	6013      	str	r3, [r2, #0]
 8000570:	4a35      	ldr	r2, [pc, #212]	; (8000648 <countiu()+0x130>)
 8000572:	6813      	ldr	r3, [r2, #0]
 8000574:	3301      	adds	r3, #1
 8000576:	6013      	str	r3, [r2, #0]
 8000578:	4a36      	ldr	r2, [pc, #216]	; (8000654 <countiu()+0x13c>)
 800057a:	4c37      	ldr	r4, [pc, #220]	; (8000658 <countiu()+0x140>)
 800057c:	6813      	ldr	r3, [r2, #0]
 800057e:	3301      	adds	r3, #1
 8000580:	6013      	str	r3, [r2, #0]
 8000582:	4b36      	ldr	r3, [pc, #216]	; (800065c <countiu()+0x144>)
 8000584:	781b      	ldrb	r3, [r3, #0]
 8000586:	bb13      	cbnz	r3, 80005ce <countiu()+0xb6>
 8000588:	7823      	ldrb	r3, [r4, #0]
 800058a:	2b00      	cmp	r3, #0
 800058c:	d02f      	beq.n	80005ee <countiu()+0xd6>
 800058e:	bd10      	pop	{r4, pc}
 8000590:	781b      	ldrb	r3, [r3, #0]
 8000592:	2b00      	cmp	r3, #0
 8000594:	d1f0      	bne.n	8000578 <countiu()+0x60>
 8000596:	4c28      	ldr	r4, [pc, #160]	; (8000638 <countiu()+0x120>)
 8000598:	7823      	ldrb	r3, [r4, #0]
 800059a:	2b02      	cmp	r3, #2
 800059c:	d109      	bne.n	80005b2 <countiu()+0x9a>
 800059e:	4a30      	ldr	r2, [pc, #192]	; (8000660 <countiu()+0x148>)
 80005a0:	4b27      	ldr	r3, [pc, #156]	; (8000640 <countiu()+0x128>)
 80005a2:	6818      	ldr	r0, [r3, #0]
 80005a4:	e9d2 3100 	ldrd	r3, r1, [r2]
 80005a8:	181b      	adds	r3, r3, r0
 80005aa:	eb41 71e0 	adc.w	r1, r1, r0, asr #31
 80005ae:	e9c2 3100 	strd	r3, r1, [r2]
 80005b2:	7823      	ldrb	r3, [r4, #0]
 80005b4:	2b01      	cmp	r3, #1
 80005b6:	d1df      	bne.n	8000578 <countiu()+0x60>
 80005b8:	4a2a      	ldr	r2, [pc, #168]	; (8000664 <countiu()+0x14c>)
 80005ba:	4b21      	ldr	r3, [pc, #132]	; (8000640 <countiu()+0x128>)
 80005bc:	6818      	ldr	r0, [r3, #0]
 80005be:	e9d2 3100 	ldrd	r3, r1, [r2]
 80005c2:	181b      	adds	r3, r3, r0
 80005c4:	eb41 71e0 	adc.w	r1, r1, r0, asr #31
 80005c8:	e9c2 3100 	strd	r3, r1, [r2]
 80005cc:	e7d4      	b.n	8000578 <countiu()+0x60>
 80005ce:	4a26      	ldr	r2, [pc, #152]	; (8000668 <countiu()+0x150>)
 80005d0:	4b1b      	ldr	r3, [pc, #108]	; (8000640 <countiu()+0x128>)
 80005d2:	6818      	ldr	r0, [r3, #0]
 80005d4:	e9d2 3100 	ldrd	r3, r1, [r2]
 80005d8:	181b      	adds	r3, r3, r0
 80005da:	eb41 71e0 	adc.w	r1, r1, r0, asr #31
 80005de:	e9c2 3100 	strd	r3, r1, [r2]
 80005e2:	4a22      	ldr	r2, [pc, #136]	; (800066c <countiu()+0x154>)
 80005e4:	6813      	ldr	r3, [r2, #0]
 80005e6:	3301      	adds	r3, #1
 80005e8:	6013      	str	r3, [r2, #0]
 80005ea:	7823      	ldrb	r3, [r4, #0]
 80005ec:	e7cf      	b.n	800058e <countiu()+0x76>
 80005ee:	4b20      	ldr	r3, [pc, #128]	; (8000670 <countiu()+0x158>)
 80005f0:	781b      	ldrb	r3, [r3, #0]
 80005f2:	2b00      	cmp	r3, #0
 80005f4:	d1cb      	bne.n	800058e <countiu()+0x76>
 80005f6:	4a10      	ldr	r2, [pc, #64]	; (8000638 <countiu()+0x120>)
 80005f8:	7813      	ldrb	r3, [r2, #0]
 80005fa:	2b02      	cmp	r3, #2
 80005fc:	d10a      	bne.n	8000614 <countiu()+0xfc>
 80005fe:	491d      	ldr	r1, [pc, #116]	; (8000674 <countiu()+0x15c>)
 8000600:	480f      	ldr	r0, [pc, #60]	; (8000640 <countiu()+0x128>)
 8000602:	880b      	ldrh	r3, [r1, #0]
 8000604:	6840      	ldr	r0, [r0, #4]
 8000606:	4283      	cmp	r3, r0
 8000608:	bfbf      	itttt	lt
 800060a:	eb03 0343 	addlt.w	r3, r3, r3, lsl #1
 800060e:	181b      	addlt	r3, r3, r0
 8000610:	109b      	asrlt	r3, r3, #2
 8000612:	800b      	strhlt	r3, [r1, #0]
 8000614:	7813      	ldrb	r3, [r2, #0]
 8000616:	2b01      	cmp	r3, #1
 8000618:	d1b9      	bne.n	800058e <countiu()+0x76>
 800061a:	4a17      	ldr	r2, [pc, #92]	; (8000678 <countiu()+0x160>)
 800061c:	4908      	ldr	r1, [pc, #32]	; (8000640 <countiu()+0x128>)
 800061e:	8813      	ldrh	r3, [r2, #0]
 8000620:	6849      	ldr	r1, [r1, #4]
 8000622:	428b      	cmp	r3, r1
 8000624:	bfbf      	itttt	lt
 8000626:	eb03 0343 	addlt.w	r3, r3, r3, lsl #1
 800062a:	185b      	addlt	r3, r3, r1
 800062c:	109b      	asrlt	r3, r3, #2
 800062e:	8013      	strhlt	r3, [r2, #0]
 8000630:	e7ad      	b.n	800058e <countiu()+0x76>
 8000632:	bf00      	nop
 8000634:	20000032 	.word	0x20000032
 8000638:	2000119a 	.word	0x2000119a
 800063c:	200002d0 	.word	0x200002d0
 8000640:	20000ae8 	.word	0x20000ae8
 8000644:	20000b1c 	.word	0x20000b1c
 8000648:	20000b24 	.word	0x20000b24
 800064c:	200002c8 	.word	0x200002c8
 8000650:	20000b20 	.word	0x20000b20
 8000654:	20000b28 	.word	0x20000b28
 8000658:	200021d6 	.word	0x200021d6
 800065c:	200021d2 	.word	0x200021d2
 8000660:	200002c0 	.word	0x200002c0
 8000664:	200002b8 	.word	0x200002b8
 8000668:	200002b0 	.word	0x200002b0
 800066c:	20000ae4 	.word	0x20000ae4
 8000670:	200021d4 	.word	0x200021d4
 8000674:	20000b80 	.word	0x20000b80
 8000678:	20000b7e 	.word	0x20000b7e

 

Ужас! :shok:

Выкинуть, компилить IAR-ом.

Зачем у вас одни и те же переменные многократно читаются??? Они что - volatile (спрашиваю уже в 3-й раз)?

PS: Тут только - включать голову и переписывать всё по-новой, нормально. И компилятор нормальный взять. Или свой настроить корректно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А PLL ядра-то правильно настроена? Другие участки кода быстро исполняются?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...