Пн фев 14, 2022 18:23:27
Затем, что иначе ему пришлось бы добавлять команду LDR. А это дороже и по размеру и по тактам.Eddy_Em писал(а):Даже с оптимизацией -O3 он пишет именно так вместо bic.w r2, r2, 0xc3c00000
Пн фев 14, 2022 18:47:51
GPIOA->MODER = (GPIOA->MODER & ~(GPIO_MODER_MODE15_Msk | GPIO_MODER_MODE11_Msk | GPIO_MODER_MODE12_Msk));
MOV R1,#+1207959552 ; GPIOA.MODER
LDR.N R0,??DataTable0 ; 0x3C3F'FFFF
LDR R2,[R1, #+0]
ANDS R2,R0,R2
STR R2,[R1, #+0]
??DataTable0:
DC32 0x3c3fffff
Пн фев 14, 2022 19:21:52
TRUE_INLINE uint32_t AFRf(uint8_t afr, uint8_t pin){
if(pin > 7) pin -= 8;
return (afr << (pin * 4));
}
Пн фев 14, 2022 19:29:59
Пн фев 14, 2022 19:52:35
Пн фев 14, 2022 19:59:48
Пн фев 14, 2022 20:22:47
0x200007c2 4F F0 90 45 mov.w r5, #1207959552 ; 0x48000000
0x200007c6 2B 68 ldr r3, [r5, #0]
0x200007c8 23 F0 43 43 bic.w r3, r3, #3271557120 ; 0xc3000000
0x200007cc 23 F4 40 03 bic.w r3, r3, #12582912 ; 0xc00000
0x200007d0 2B 60 str r3, [r5, #0]
0x2000'1466: 0xf04f 0x4490 MOV.W R4, #1207959552 ; 0x4800'0000
0x2000'146a: 0x4827 LDR.N R0, ??DataTable3 ; 0x3c3f'ffff
0x2000'146c: 0x6821 LDR R1, [R4]
0x2000'146e: 0x4001 ANDS R1, R1, R0
0x2000'1470: 0x6021 STR R1, [R4]
??DataTable3:
0x2000'1508: 0x3c3f'ffff DC32 0x3c3f'ffff
0x20001FA2 F04F4090 MOV r0,#0x48000000
0x20001FA6 6801 LDR r1,[r0,#0x00]
0x20001FA8 F64F72FF MOVW r2,#0xFFFF
0x20001FAC F6C3423F MOVT r2,#0x3C3F
0x20001FB0 4011 ANDS r1,r1,r2
0x20001FB2 6001 STR r1,[r0,#0x00]
Пн фев 14, 2022 22:39:57
Пн фев 14, 2022 23:29:19
Ср фев 21, 2024 10:50:18
void SystemInit(void)
{
/* FPU settings ----------*/
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
#endif
}
GPIOC->BSRR = GPIO_BSRR_BS_14;
for (uint16_t i = 0; i < ADC_BUFFER_SIZE; i++) //#define ADC_BUFFER_SIZE 512U
{ uint16_t j = i / 2;
float step = (float)j / SAMPLES_NO; // SAMPLES_NO (ADC_BUFFER_SIZE/2)
if (i % 2 == 0) //четность массива
{
BufInArray[j] = Buffer_ADC[i];
Re += (float)BufInArray[j] * cosf(TWOPI_F * step);
Im += (float)BufInArray[j] * sinf(TWOPI_F * step);
}
else
{
BufInArray_2[j] = Buffer_ADC[i];
Re_2 += (float)BufInArray_2[j] * cosf(TWOPI_F * step);
Im_2 += (float)BufInArray_2[j] * sinf(TWOPI_F * step);
}
}
Angle = atan2f(Im, Re);
Angle = Angle * RAD; // RAD=(180/ПИ)
Angle_2 = atan2f(Im_2, Re_2);
Angle_2 = Angle_2 * RAD;
Re = 0; Re_2 = 0; Im = 0; Im_2 = 0;
GPIOC->BSRR = GPIO_BSRR_BR_14;
Ср фев 21, 2024 13:48:42
Ср фев 21, 2024 15:27:08
Чт фев 22, 2024 17:03:07
for (uint16_t i = 0; i < ADC_BUFFER_SIZE; i++) //#define ADC_BUFFER_SIZE 512U
{ uint16_t j = i / 2;
...
Чт фев 22, 2024 21:47:12
Пт фев 23, 2024 01:32:27
uint i;
u16 *p = &BufInArray[j];
if (i % 2) p = &BufInArray_2[j]; //нечётность массива
*p = i = Buffer_ADC[i];
float x0 = i * cosf(TWOPI_F * step);
float x1 = i * sinf(TWOPI_F * step);
if (i % 2) {
Re_2 += x0;
Im_2 += x1;
} else {
Re += x0;
Im += x1;
}
struct {
float Re, Im;
} x[2];
Пт фев 23, 2024 09:45:43
uint i;
u16 *p = &BufInArray[j];
if (i % 2) p = &BufInArray_2[j]; //нечётность массива
*p = i = Buffer_ADC[i];
float x0 = i * cosf(TWOPI_F * step);
float x1 = i * sinf(TWOPI_F * step);
if (i % 2) {
Re_2 += x0;
Im_2 += x1;
} else {
Re += x0;
Im += x1;
}
Пт фев 23, 2024 10:48:46
Пт фев 23, 2024 10:56:49
Пт фев 23, 2024 11:04:45