ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
24 апреля
874810 Топик полностью
maleon (03.10.2018 09:12, просмотров: 155) ответил maleon на STM32 Bit-Band, с портами работает нормально, а с переменными всё вычисляет ассемблером. Можно обяснить компилятору (Keil), что-бы адрес flags испльзовал на этапе компиляции? Может какой другой компилятор работает оптимальнее?
Вот так без битбанда:  static u32 flags; GPIOA->ODR ^= 1 << 5; flags ^= 1 << 15; BBB(GPIOA->ODR, 5) ^= 1; BBB(flags, 15) ^= 1; 43: GPIOA->ODR ^= 1 << 5; 0x08000422 4823 LDR r0,[pc,#140] ; @0x080004B0 0x08000424 300C ADDS r0,r0,#0x0C 0x08000426 6800 LDR r0,[r0,#0x00] 0x08000428 F0800020 EOR r0,r0,#0x20 0x0800042C 4920 LDR r1,[pc,#128] ; @0x080004B0 0x0800042E 310C ADDS r1,r1,#0x0C 0x08000430 6008 STR r0,[r1,#0x00] 44: flags ^= 1 << 15; 0x08000432 4821 LDR r0,[pc,#132] ; @0x080004B8 0x08000434 6800 LDR r0,[r0,#0x00] 0x08000436 F4804000 EOR r0,r0,#0x8000 0x0800043A 491F LDR r1,[pc,#124] ; @0x080004B8 0x0800043C 6008 STR r0,[r1,#0x00] 45: BBB(GPIOA->ODR, 5) ^= 1; 0x0800043E 481F LDR r0,[pc,#124] ; @0x080004BC 0x08000440 6800 LDR r0,[r0,#0x00] 0x08000442 F0800001 EOR r0,r0,#0x01 0x08000446 491E LDR r1,[pc,#120] ; @0x080004C0 0x08000448 F8C10194 STR r0,[r1,#0x194] 46: BBB(flags, 15) ^= 1; 0x0800044C 481A LDR r0,[pc,#104] ; @0x080004B8 0x0800044E F36F0013 BFC r0,#0,#20 0x08000452 491C LDR r1,[pc,#112] ; @0x080004C4 0x08000454 4308 ORRS r0,r0,r1 0x08000456 4918 LDR r1,[pc,#96] ; @0x080004B8 0x08000458 F3C10113 UBFX r1,r1,#0,#20 0x0800045C EA401041 ORR r0,r0,r1,LSL #5 0x08000460 6800 LDR r0,[r0,#0x00] 0x08000462 F0800101 EOR r1,r0,#0x01 0x08000466 4814 LDR r0,[pc,#80] ; @0x080004B8 0x08000468 F36F0013 BFC r0,#0,#20 0x0800046C 4B15 LDR r3,[pc,#84] ; @0x080004C4 0x0800046E 4318 ORRS r0,r0,r3 0x08000470 4B11 LDR r3,[pc,#68] ; @0x080004B8 0x08000472 F3C30313 UBFX r3,r3,#0,#20 0x08000476 EA401043 ORR r0,r0,r3,LSL #5 0x0800047A 6001 STR r1,[r0,#0x00]