Сб ноя 23, 2019 20:27:56
Сб ноя 23, 2019 21:33:00
Сб ноя 23, 2019 22:55:53
[cc] D:\Disk_D\PRG\coconut\main.c:18:5: warning: implicit declaration of function 'Delay' [-Wimplicit-function-declaration]
[cc] Delay(8000000);
[cc] ^~~~~
[cc] D:\Disk_D\PRG\coconut\main.c: At top level:
[cc] D:\Disk_D\PRG\coconut\main.c:22:6: warning: conflicting types for 'Delay'
Сб ноя 23, 2019 22:56:57
Сб ноя 23, 2019 23:48:55
Так приведите весь код, который нужно компилировать...jcxz писал(а):Неправильно скомпилили.
Оптимизация O2, ядро M3.jcxz писал(а):Или у Вас включена оптимизация по размеру, а не по скорости, или выбрано неправильное ядро (не CM3, CM4F).
Потому что данные в __IO регистре, т. е. valatile. Было бы лучше если привели текстовый код. Это исключило бы неточности.jcxz писал(а):Компилятор у Вас зачем то перегружал повторно указатель, потратив на это лишние команды LDR.
Вс ноя 24, 2019 11:10:26
while (1)
{
...
delay(8000000);
...
}
void delay(uint16_t time)
{}
Вс ноя 24, 2019 11:55:45
__disable_irq();
uint32_t t1 = DWT->CYCCNT;
__NOP();
GPIOC->ODR = 3 - ((GPIOA->IDR>>10)&1) - ((GPIOB->IDR>>0)&1)*2;
uint32_t t2 = DWT->CYCCNT;
DEBUG_Print("TICS = %d\r\n",t2-t1);
__enable_irq();
// 12 __disable_irq();
CPSID I
// 13 uint32_t t1 = DWT->CYCCNT;
LDR.N R0,??DataTable1 ;; 0xe0001004
LDR R2,[R0, #+0]
// 14 __NOP();
Nop
// 15 GPIOC->ODR = 3 - ((GPIOA->IDR>>10)&1) - ((GPIOB->IDR>>0)&1)*2;
LDR.N R1,??DataTable1_1 ;; 0x48000010
LDR R3,[R1, #+0]
LDR R4,[R1, #+1024]
UBFX R3,R3,#+10,#+1
LSLS R4,R4,#+1
RSB R3,R3,#+3
AND R4,R4,#0x2
SUBS R3,R3,R4
STR R3,[R1, #+2052]
// 16 uint32_t t2 = DWT->CYCCNT;
LDR R0,[R0, #+0]
// 17 DEBUG_Print("TICS = %d\r\n",t2-t1);
ADR.N R1,?_0
SUBS R2,R0,R2
MOVS R0,#+0
BL SEGGER_RTT_printf
// 18 __enable_irq();
0x2000026e cpsid i
0x20000270 ldr r0, [pc, #88] ; (0x200002cc <main()+96>)
0x20000272 ldr r2, [r0, #4]
0x20000274 nop
0x20000276 mov.w r3, #1207959552 ; 0x48000000
0x2000027a ldr r1, [pc, #84] ; (0x200002d0 <main()+100>)
0x2000027c ldr r3, [r3, #16]
0x2000027e ldr r1, [r1, #16]
0x20000280 ubfx r3, r3, #10, #1
0x20000284 and.w r1, r1, #1
0x20000288 add.w r3, r3, r1, lsl #1
0x2000028c ldr r1, [pc, #68] ; (0x200002d4 <main()+104>)
0x2000028e rsb r3, r3, #3
0x20000292 str r3, [r1, #20]
0x20000294 ldr r3, [r0, #4]
0x20000296 ldr r1, [pc, #64] ; (0x200002d8 <main()+108>)
0x20000298 subs r2, r3, r2
0x2000029a movs r0, #0
0x2000029c bl 0x200007c2 <SEGGER_RTT_printf(unsigned int, char const*, ...)>
0x200002a0 cpsie i
0x2000027e cpsid i
0x20000280 ldr r4, [pc, #88] ; (0x200002dc <main()+96>)
0x20000282 ldr r2, [r4, #4]
0x20000284 nop
0x20000286 ldr r1, [pc, #88] ; (0x200002e0 <main()+100>)
0x20000288 ldr r5, [pc, #88] ; (0x200002e4 <main()+104>)
0x2000028a mov.w r3, #1207959552 ; 0x48000000
0x2000028e ldr r3, [r3, #16]
0x20000290 ldr r0, [r1, #16]
0x20000292 ldr r1, [pc, #84] ; (0x200002e8 <main()+108>)
0x20000294 and.w r0, r0, #1
0x20000298 ubfx r3, r3, #10, #1
0x2000029c add.w r3, r3, r0, lsl #1
0x200002a0 rsb r3, r3, #3
0x200002a4 str r3, [r5, #20]
0x200002a6 ldr r3, [r4, #4]
0x200002a8 movs r0, #0
0x200002aa subs r2, r3, r2
0x200002ac bl 0x20000b84 <SEGGER_RTT_printf(unsigned int, char const*, ...)>
0x200002b0 cpsie i
__disable_irq();
GPIO::PB_0 pb0;
uint32_t t1 = DWT->CYCCNT;
__NOP();
GPIOC->ODR = 3 - ((GPIOA->IDR>>10)&1) - pb0*2;
uint32_t t2 = DWT->CYCCNT;
DEBUG_Print("TICS = %d\r\n",t2-t1);
__enable_irq();
UBFX R3,R3,#+10,#+1
RSB R3,R3,#+3
AND R4,R4,#0x1
SUB R3,R3,R4, LSL #+1
// 9 __disable_irq();
CPSID I
// 10 uint32_t t1 = DWT->CYCCNT;
LDR.N R0,??DataTable1 ;; 0xe0001004
LDR R2,[R0, #+0]
// 11 __NOP();
Nop
// 12 GPIOC->ODR = 3 - ((GPIOA->IDR>>10)&1) - pb0*2;
LDR.N R1,??DataTable1_1 ;; 0x48000010
LDR R3,[R1, #+0]
LDR R4,[R1, #+1024]
UBFX R3,R3,#+10,#+1
RSB R3,R3,#+3
AND R4,R4,#0x1
SUB R3,R3,R4, LSL #+1
STR R3,[R1, #+2052]
// 13 uint32_t t2 = DWT->CYCCNT;
LDR R0,[R0, #+0]
// 14 DEBUG_Print("TICS = %d\r\n",t2-t1);
ADR.N R1,?_1
SUBS R2,R0,R2
MOVS R0,#+0
BL SEGGER_RTT_printf
// 15 __enable_irq();
0x2000026e cpsid i
0x20000270 ldr r0, [pc, #88] ; (0x200002cc <main()+96>)
0x20000272 ldr r2, [r0, #4]
0x20000274 nop
0x20000276 mov.w r3, #1207959552 ; 0x48000000
0x2000027a ldr r1, [pc, #84] ; (0x200002d0 <main()+100>)
0x2000027c ldr r3, [r3, #16]
0x2000027e ldr r1, [r1, #16]
0x20000280 ubfx r3, r3, #10, #1
0x20000284 and.w r1, r1, #1
0x20000288 rsb r3, r3, #3
0x2000028c sub.w r3, r3, r1, lsl #1
0x20000290 ldr r1, [pc, #64] ; (0x200002d4 <main()+104>)
0x20000292 str r3, [r1, #20]
0x20000294 ldr r3, [r0, #4]
0x20000296 ldr r1, [pc, #64] ; (0x200002d8 <main()+108>)
0x20000298 subs r2, r3, r2
0x2000029a movs r0, #0
0x2000029c bl 0x200007c2 <SEGGER_RTT_printf(unsigned int, char const*, ...)>
0x200002a0 cpsie i
0x2000027e cpsid i
0x20000280 ldr r4, [pc, #88] ; (0x200002dc <main()+96>)
0x20000282 ldr r2, [r4, #4]
0x20000284 nop
0x20000286 mov.w r3, #1207959552 ; 0x48000000
0x2000028a ldr r1, [pc, #84] ; (0x200002e0 <main()+100>)
0x2000028c ldr r3, [r3, #16]
0x2000028e ldr r0, [r1, #16]
0x20000290 ldr r5, [pc, #80] ; (0x200002e4 <main()+104>)
0x20000292 ldr r1, [pc, #84] ; (0x200002e8 <main()+108>)
0x20000294 ubfx r3, r3, #10, #1
0x20000298 and.w r0, r0, #1
0x2000029c rsb r3, r3, #3
0x200002a0 sub.w r3, r3, r0, lsl #1
0x200002a4 str r3, [r5, #20]
0x200002a6 ldr r3, [r4, #4]
0x200002a8 movs r0, #0
0x200002aa subs r2, r3, r2
0x200002ac bl 0x20000b84 <SEGGER_RTT_printf(unsigned int, char const*, ...)>
0x200002b0 cpsie i
__disable_irq();
using namespace GPIO;
PB_0 pb0;
PA_10 pa10;
GpioC<0xFFFF> port;
uint32_t t1 = DWT->CYCCNT;
__NOP();
port = 3 - pa10 - pb0*2;
uint32_t t2 = DWT->CYCCNT;
DEBUG_Print("TICS = %d\r\n",t2-t1);
__enable_irq();
// 7 __disable_irq();
CPSID I
// 8 using namespace GPIO;
// 9 PB_0 pb0;
// 10 PA_10 pa10;
// 11 GpioC<0xFFFF> port;
// 12 uint32_t t1 = DWT->CYCCNT;
LDR.N R0,??DataTable1 ;; 0xe0001004
LDR R2,[R0, #+0]
// 13 __NOP();
Nop
// 14 port = 3 - pa10 - pb0*2;
LDR.N R1,??DataTable1_1 ;; 0x48000010
LDR R3,[R1, #+0]
LDR R4,[R1, #+1024]
LSRS R3,R3,#+10
AND R3,R3,#0x1
RSB R3,R3,#+3
AND R4,R4,#0x1
SUB R3,R3,R4, LSL #+1
STR R3,[R1, #+2052]
// 15 uint32_t t2 = DWT->CYCCNT;
LDR R0,[R0, #+0]
// 16 DEBUG_Print("TICS = %d\r\n",t2-t1);
Nop
ADR.N R1,?_3
SUBS R2,R0,R2
MOVS R0,#+0
BL SEGGER_RTT_printf
// 17 __enable_irq();
Вс ноя 24, 2019 22:20:27
Вс ноя 24, 2019 23:49:02
Потому что данные в __IO регистре, т. е. valatile.jcxz писал(а):Компилятор у Вас зачем то перегружал повторно указатель, потратив на это лишние команды LDR.
Пн ноя 25, 2019 08:30:08
LDR.N R1,??DataTable1_1 ;; 0x48000010
LDR R3,[R1, #+0]
LDR R4,[R1, #+1024]
UBFX R3,R3,#+10,#+1
LSLS R4,R4,#+1
RSB R3,R3,#+3
AND R4,R4,#0x2
SUBS R3,R3,R4
STR R3,[R1, #+2052]
LDR.N R1,??DataTable1_1 ;; 0x48000010
LDR R3,[R1, #+0]
LDR R4,[R1, #+1024]
UBFX R3,R3,#+10,#+1
RSB R3,R3,#+3
AND R4,R4,#0x1
SUB R3,R3,R4, LSL #+1
STR R3,[R1, #+2052]
LDR.N R1,??DataTable1_1 ;; 0x48000010
LDR R3,[R1, #+0]
LDR R4,[R1, #+1024]
LSRS R3,R3,#+10
AND R3,R3,#0x1
RSB R3,R3,#+3
AND R4,R4,#0x1
SUB R3,R3,R4, LSL #+1
STR R3,[R1, #+2052]
__disable_irq();
uint32_t t1 = DWT->CYCCNT;
__NOP();
GPIOC->ODR = ~(((GPIOA->IDR>>10)&1) | ((GPIOB->IDR>>0)&1)*2) & 3;
uint32_t t2 = DWT->CYCCNT;
DEBUG_Print("TICS = %d\r\n",t2-t1);
__enable_irq();
//GPIOC->ODR = ~(((GPIOA->IDR>>10)&1) | ((GPIOB->IDR>>0)&1)*2) & 3;
LDR.N R1,??DataTable1_1 ;; 0x48000010
LDR R3,[R1, #+0]
LDR R4,[R1, #+1024]
UBFX R3,R3,#+10,#+1
ORR R3,R3,R4, LSL #+1
MVNS R3,R3
AND R3,R3,#0x3
STR R3,[R1, #+2052]
Пн ноя 25, 2019 16:59:46
Вт ноя 26, 2019 08:11:32
Чт ноя 28, 2019 04:44:27
Чт ноя 28, 2019 10:02:26
Чт ноя 28, 2019 11:45:47
Чт ноя 28, 2019 17:34:57
Чт ноя 28, 2019 20:09:42
Чт ноя 28, 2019 20:47:27
Чт ноя 28, 2019 23:05:04
Пт ноя 29, 2019 07:18:58