CooCox STM32F303 быстрое чтение порта

Кто любит RISC в жизни, заходим, не стесняемся.
Закрыто
Novice user
Мудрый кот
Сообщения: 1704
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

CooCox STM32F303 быстрое чтение порта

Сообщение Novice user »

Использую COOCOX,как можно организовать самое быстрое чтение порта за целое количество тактов?
Сейчас у меня так-

Код: Выделить всё

unsigned int x;
    x=0;
         Buffer[x++]=GPIOB->IDR ;
   Buffer[x++]=GPIOB->IDR;
   Buffer[x++]=GPIOB->IDR;
   Buffer[x++]=GPIOB->IDR;
   Buffer[x++]=GPIOB->IDR;
   Buffer[x++]=GPIOB->IDR;
   Buffer[x++]=GPIOB->IDR;
   Buffer[x++]=GPIOB->IDR;
   Buffer[x++]=GPIOB->IDR;
   Buffer[x++]=GPIOB->IDR;
   Buffer[x++]=GPIOB->IDR;//10
   Buffer[x++]=GPIOB->IDR;
   Buffer[x++]=GPIOB->IDR;
   Buffer[x++]=GPIOB->IDR;
   Buffer[x++]=GPIOB->IDR;
   Buffer[x++]=GPIOB->IDR;
   Buffer[x++]=GPIOB->IDR;
   Buffer[x++]=GPIOB->IDR;
   Buffer[x++]=GPIOB->IDR;
   Buffer[x++]=GPIOB->IDR;
   Buffer[x++]=GPIOB->IDR;//20
   Buffer[x++]=GPIOB->IDR;
   Buffer[x++]=GPIOB->IDR;
   Buffer[x++]=GPIOB->IDR;
   Buffer[x++]=GPIOB->IDR;
   Buffer[x++]=GPIOB->IDR;
   Buffer[x++]=GPIOB->IDR;
   Buffer[x++]=GPIOB->IDR;
   Buffer[x++]=GPIOB->IDR;
     ......
но появляется откуда то странная неравномерность в каждом отсчете по количеству тактов
Никаких таймеров и прерываний в программе не задействованы,тактовая 72 МГц
Реклама
Аватара пользователя
240265
Электрический кот
Сообщения: 1029
Зарегистрирован: Сб мар 09, 2013 11:29:22
Откуда: 40RUS, Жуков

Re: COOCOX STM32F303 быстрое чтение порта

Сообщение 240265 »

Конвейер захлебывается.
IVL ex UA6PJ
Реклама
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: COOCOX STM32F303 быстрое чтение порта

Сообщение Reflector »

[uquote="Novice user",url="/forum/viewtopic.php?p=3724160#p3724160"]как можно организовать самое быстрое чтение порта за целое количество тактов?[/uquote]
Чтобы F3 читал за целое число тактов должно быть выставлено 0WS, для 72 MHz этого можно добиться выполняя код из CCM RAM, будет 2 такта если компилятор все скомпилит в LDR + STR. По нормальному нужно сразу на ассме и писать:

Код: Выделить всё

asm("LDRB R0, [R1]");
asm("STRB R0, [R2], #1");
Из флеша будет 2.5 такта и больше, в зависимости от величины WS.
Аватара пользователя
240265
Электрический кот
Сообщения: 1029
Зарегистрирован: Сб мар 09, 2013 11:29:22
Откуда: 40RUS, Жуков

Re: COOCOX STM32F303 быстрое чтение порта

Сообщение 240265 »

IVL ex UA6PJ
Реклама
Эиком - электронные компоненты и радиодетали
Novice user
Мудрый кот
Сообщения: 1704
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

Re: COOCOX STM32F303 быстрое чтение порта

Сообщение Novice user »

240265, я это читал,толком не понятно как считать быстро-одни рассуждения )))

Добавлено after 51 minute 37 seconds:
Попробовал так

Код: Выделить всё

uint16_t arr[300];
const uint32_t idr = (uint32_t)&GPIOB->IDR;

		asm("PUSH {R0, R1, R2}");

		asm("MOV R2, %0" : : "r" (arr));//arr= http://docplayer.ru/54665016-Optimizacii-v-staticheskih-i-dinamicheskih-kompilyatorah-i-ih-primenenie-na-primere-gcc-llvm-javascriptdvizhkov.html
		asm("MOVW R1, %0" : : "n" (idr & 0xFFFF));
		asm("MOVT R1, %0" : : "n" (idr >> 16));

        asm("LDRB R0, [R1]");
        asm("STRB R0, [R2], #1");
        asm("LDRB R0, [R1]");
        asm("STRB R0, [R2], #1");
        asm("LDRB R0, [R1]");
        asm("STRB R0, [R2], #1");
        asm("LDRB R0, [R1]");
        asm("STRB R0, [R2], #1");
        asm("LDRB R0, [R1]");
        asm("STRB R0, [R2], #1");
        asm("LDRB R0, [R1]");
        asm("STRB R0, [R2], #1");
        asm("LDRB R0, [R1]");
        asm("STRB R0, [R2], #1");
        asm("LDRB R0, [R1]");
        asm("STRB R0, [R2], #1");
        ......
        asm("POP {R0, R1, R2}");

Почему то буфер не заполняется данными с порта B

Добавлено after 9 minutes 15 seconds:
Стоп!arr это адрес буфера а не переменная?
Реклама
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: COOCOX STM32F303 быстрое чтение порта

Сообщение Reflector »

[uquote="Novice user",url="/forum/viewtopic.php?p=3724265#p3724265"]Стоп!arr это адрес буфера а не переменная?[/uquote]
Все там правильно, единственное если используешь LDRB/STRB, то массив должен быть uint8_t. Или пиши LDRH...
Реклама
Аватара пользователя
240265
Электрический кот
Сообщения: 1029
Зарегистрирован: Сб мар 09, 2013 11:29:22
Откуда: 40RUS, Жуков

Re: COOCOX STM32F303 быстрое чтение порта

Сообщение 240265 »

В майне обьявляю volatile uint8_t buffer[1024];
.
.
Затем вызываю ReadADC((uint32_t)&buffer[0], Band );

Добавлено after 56 seconds:
Но это в Кейле.
Вложения
ReadADC.c
(60.16 КБ) 470 скачиваний
IVL ex UA6PJ
Novice user
Мудрый кот
Сообщения: 1704
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

Re: COOCOX STM32F303 быстрое чтение порта

Сообщение Novice user »

У меня ошибки...
СпойлерC:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:48:2: error: unknown type name 'LDRB'
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:48:12: error: expected identifier or '(' before '[' token
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:48:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:49:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:50:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:51:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:52:13: error: stray '#' in program
[cc] ^
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:54:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:53:29: error: stray '#' in program
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:55:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:56:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:57:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:58:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:59:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:60:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:61:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:62:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:63:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:64:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:65:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:66:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:67:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:68:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:69:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:70:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:71:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:72:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:73:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:74:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:75:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:76:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:77:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:78:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:79:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:82:13: error: stray '#' in program
[cc] ^
[cc] LDRB rez,[#0x48000411]
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:83:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:84:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:85:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:86:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:87:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:88:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:89:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:90:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:91:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:92:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:93:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:94:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:95:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:96:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:97:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:98:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:99:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:100:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:101:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:102:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:103:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:104:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:105:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:106:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:107:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] STRB rez,[addressbuffer], #1
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:109:29: error: stray '#' in program
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:108:13: error: stray '#' in program
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:110:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:112:13: error: stray '#' in program
[cc] ^
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] STRB rez,[addressbuffer], #1
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:111:29: error: stray '#' in program
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:113:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:116:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:117:29: error: stray '#' in program
[cc] ^
[cc] STRB rez,[addressbuffer], #1
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:118:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:119:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:120:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:121:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] LDRB rez,[#0x48000411]
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:122:13: error: stray '#' in program
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:123:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:124:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:125:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:126:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:127:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:128:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:129:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:130:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:131:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:132:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:134:13: error: stray '#' in program
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:133:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] LDRB rez,[#0x48000411]
[cc] ^
......\OSC F303 LS020 021\main.c:1297:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1298:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1299:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1300:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1301:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1302:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1303:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1306:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1307:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1308:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1309:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1310:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1311:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1312:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1313:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1314:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1315:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1316:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1317:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1318:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1319:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1320:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1321:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1322:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1323:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1324:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1325:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1326:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1327:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1328:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1329:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1330:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1331:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1332:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1333:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1334:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1335:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1336:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1337:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1340:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1341:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1342:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1343:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1344:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1345:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1346:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1347:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1348:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1349:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1350:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1351:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1352:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1353:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1354:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1355:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1356:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1357:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1358:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1359:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1360:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1361:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1362:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1363:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1364:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1365:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1366:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1367:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1368:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1369:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1370:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1371:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1374:13: error: stray '#' in program
[cc] LDRB rez,[#0x48000411]
[cc] ^
[cc] C:\CooCox\CoIDE\workspace\OSC F303 LS020 021\main.c:1375:29: error: stray '#' in program
[cc] STRB rez,[addressbuffer], #1
Добавлено after 17 minutes 27 seconds:
исходник пока такой
Вложения
main.c
(19.56 КБ) 589 скачиваний
jcxz
Мудрый кот
Сообщения: 1726
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: COOCOX STM32F303 быстрое чтение порта

Сообщение jcxz »

[uquote="Novice user",url="/forum/viewtopic.php?p=3724354#p3724354"]У меня ошибки...
исходник пока такой[/uquote]Столько ошибок в элементарном коде.... :shock: Надо всё-таки мануалы читать перед тем как что-то писать. Если конечно не чукча... :)))
asm("PUSH {R0, R1, R2}");
Это зачем? В чём смысл? Читайте раздел про Calling conventions для своего компилятора.
asm("MOV R2, %0" : : "r" (arr));
Разве arr у вас внутри функции - в регистре?
asm("MOV R2, %0" : : "r" (arr));//arr= http://docplayer.ru/54665016-Optimizaci ... zhkov.html
asm("MOVW R1, %0" : : "n" (idr & 0xFFFF));
asm("LDRH R0, [R1]");
Зачем распилили один asm-оператор на множество отдельных??? Чтобы себе в ногу выстрелить? Вы разве не понимаете, что всё это внутри си-функции и компилятор вправе вставить между двумя вашими соседними asm-операторами другие команды, которые попортят содержимое R0,R1?
Сам синтаксис asm-оператора сделан так, чтобы в него включить весь код, на входе - загрузив все нужные регистры из переменных, на выходе - выгрузив в переменные. А между двумя соседними асм-операторами сохранность регистров не гарантируется.
И вообще - зачем использовать явно-указанные регистры R0,R1,R2? Синтаксис asm-оператора позволяет этого не делать избегая таким образом конфликтов с окружающим си-кодом.
И что такое "(idr & 0xFFFF)"? Зачем? :shock:
asm("STRH R0, [R2], #1");
Если у Вас массив типа u16, то почему шаг между соседними его элементами делаете 1 байт? Читайте описание системы команд Cortex-M.
И почему нет указания компилятору что данные асм-операторы обращаются к памяти? Читайте описание синтаксиса оператора asm!

PS: Да и вообще - такой код лучше в отдельном асм-файле писать.
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: COOCOX STM32F303 быстрое чтение порта

Сообщение Reflector »

[uquote="jcxz",url="/forum/viewtopic.php?p=3724488#p3724488"]Это зачем? В чём смысл? Читайте раздел про Calling conventions для своего компилятора.[/uquote]
Novice user взял мой пример кода из старой темы, Calling conventions тут не при чем, регистры нужно сохранять потому что компилятор не отслеживает какие из них меняются в случае использования инлайн ассемблера.
asm("MOV R2, %0" : : "r" (arr));

Разве arr у вас внутри функции - в регистре?
Arr не обязана быть в регистре, "r" указывает на то, что вместо %0 должен быть подставлен регистр. Конкретно этот код скомпилируется в :

Код: Выделить всё

ldr r3, [pc, #764]
mov r2, r3
Зачем распилили один asm-оператор на множество отдельных??? Чтобы себе в ногу выстрелить? Вы разве не понимаете, что всё это внутри си-функции и компилятор вправе вставить между двумя вашими соседними asm-операторами другие команды, которые попортят содержимое R0,R1?
Сам синтаксис asm-оператора сделан так, чтобы в него включить весь код, на входе - загрузив все нужные регистры из переменных, на выходе - выгрузив в переменные. А между двумя соседними асм-операторами сохранность регистров не гарантируется.
Согласен, надежнее сделать все в виде одного asm оператора, хотя если у него нет выходных операндов, то все asm() неявно являются volatile и не оптимизируются.
И вообще - зачем использовать явно-указанные регистры R0,R1,R2? Синтаксис asm-оператора позволяет этого не делать избегая таким образом конфликтов с окружающим си-кодом.
Обычно такой код используют во всяких осциллах, там важны тайминги и если вместо регистров подставлять что-то другое, то может получится как с загрузкой arr, когда была вставлена дополнительная инструкция, а добавить PUSH/POP вроде как не проблема.
И что такое "(idr & 0xFFFF)"? Зачем? :shock:
В половину регистра 32-х битное значение не запихнешь, да компилятор это и не позволит, если оставить просто idr, то получим ошибку: immediate value out of range.
Если у Вас массив типа u16, то почему шаг между соседними его элементами делаете 1 байт? Читайте описание системы команд Cortex-M.
И почему нет указания компилятору что данные асм-операторы обращаются к памяти? Читайте описание синтаксиса оператора asm!
Да, должно быть

Код: Выделить всё

STRH R0, [R2], #2
В итоге сейчас бы я написал, наверно, так:
Спойлер

Код: Выделить всё

asm(
	"PUSH {R0, R1, R2}\n"
	"MOV R2, %0\n"
	"MOVW R1, %1\n"
	"MOVT R1, %2\n"

	"LDRH R0, [R1]\n"
	"STRH R0, [R2], #2\n"
	.....

	"POP {R0, R1, R2}"
	: : "r" (arr), "g" (idr & 0xFFFF), "g" (idr >> 16)
);
jcxz
Мудрый кот
Сообщения: 1726
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: COOCOX STM32F303 быстрое чтение порта

Сообщение jcxz »

[uquote="Reflector",url="/forum/viewtopic.php?p=3724590#p3724590"]Novice user взял мой пример кода из старой темы, Calling conventions тут не при чем, регистры нужно
сохранять потому что компилятор не отслеживает какие из них меняются в случае использования инлайн ассемблера.[/uquote]
Не отслеживает он потому, что написано через одно место. Не надо внутри asm() использовать явно заданные регистры. И тогда компилятор всё нормально отследит.
Ну по крайней мере в IAR так.

[uquote="Reflector",url="/forum/viewtopic.php?p=3724590#p3724590"]Согласен, надежнее сделать все в виде одного asm оператора, хотя если у него нет выходных операндов, то все asm() неявно являются volatile и не оптимизируются.[/uquote]Оптимизация тут не при чём. Причину Вы сам привели выше. Когда в предыдущем asm() не указали явно как грузить адрес arr и компилятор сделал это через доп. регистр. Повезло что R3 до этого не был использован в предыдущих asm(). Иначе - попортил бы его, возможно.

[uquote="Reflector",url="/forum/viewtopic.php?p=3724590#p3724590"]Обычно такой код используют во всяких осциллах, там важны тайминги и если вместо регистров подставлять что-то другое, то может получится как с загрузкой arr, когда была вставлена дополнительная инструкция, а добавить PUSH/POP вроде как не проблема.[/uquote]
Так я же говорю не про подстановку "чего-то другого", а про подстановку тех же регистров, но без явного указания номера регистра. Чтобы компилятор сам его выбирал, не конфликтуя с окружающим си-кодом.

[uquote="Reflector",url="/forum/viewtopic.php?p=3724590#p3724590"]В половину регистра 32-х битное значение не запихнешь, да компилятор это и не позволит, если оставить просто idr, то получим ошибку: immediate value out of range.[/uquote]Ничего не понял. :shock: Причём тут половина регистра?? В idr вроде как - адрес порта GPIO. Что делает "asm("MOVW R1, %0" : : "n" (idr & 0xFFFF));"?
Берёт от адреса младшие 16 бит и потом с получившегося адреса пытается читать? И что будет? :dont_know:

Добавлено after 7 minutes 7 seconds:
[uquote="Reflector",url="/forum/viewtopic.php?p=3724590#p3724590"]В итоге сейчас бы я написал, наверно, так:[/uquote]Явные регистры лучше не использовать. Тем более что все возможности для этого есть.
А также не указано, что внутри этого asm() есть обращение к памяти. А это очень важно при использовании оптимизации.
Вот пример как я делаю:

Код: Выделить всё

inline u32 AtomicAnd(u32 volatile *ptr, u32 arg)
{
  u32 r, i;
  asm(
    "p01: LDREX    %0, [%2]    \n"
    "     ANDS     %1, %0, %3  \n"
    "     STREX    %1, %1, [%2]\n"
    "     CMP      %1, #0      \n"
    "     BNE      p01           "
    : "=&r"(r), "=&r"(i)
    : "r"(ptr), "r"(arg)
    : "cc", "memory");
  i = i;
  return r;
}
Как видно - нет никаких завязок на явные регистры. Также прописано "cc", "memory".
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: CooCox STM32F303 быстрое чтение порта

Сообщение VladislavS »

Код: Выделить всё

volatile uint16_t buf[1024];

template<unsigned N>
void inline Foo(volatile uint16_t *p) __attribute__((always_inline))
{
  if constexpr (N)
  {
    *p++=*(volatile uint16_t *)&GPIOB->IDR;
    Foo<N-1>(p);
  }
}

int main()
{
  Foo<50>(buf);
  Foo<100>(buf+50);
  Foo<100>(buf+150); 
}
Оно? :)
Спойлер

Код: Выделить всё

//   23   Foo<50>(buf);
        LDR.W    R2,??DataTable1  ;; 0x48000410
        LDR.W    R1,??DataTable1_1
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+0]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+2]
        LDRH     R4,[R2, #+0]
        STRH     R4,[R1, #+4]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+6]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+8]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+10]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+12]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+14]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+16]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+18]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+20]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+22]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+24]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+26]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+28]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+30]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+32]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+34]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+36]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+38]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+40]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+42]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+44]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+46]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+48]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+50]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+52]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+54]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+56]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+58]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+60]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+62]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+64]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+66]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+68]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+70]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+72]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+74]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+76]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+78]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+80]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+82]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+84]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+86]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+88]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+90]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+92]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+94]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+96]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+98]
//   24   Foo<100>(buf+50);
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+100]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+102]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+104]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+106]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+108]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+110]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+112]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+114]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+116]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+118]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+120]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+122]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+124]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+126]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+128]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+130]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+132]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+134]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+136]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+138]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+140]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+142]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+144]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+146]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+148]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+150]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+152]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+154]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+156]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+158]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+160]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+162]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+164]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+166]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+168]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+170]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+172]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+174]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+176]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+178]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+180]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+182]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+184]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+186]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+188]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+190]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+192]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+194]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+196]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+198]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+200]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+202]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+204]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+206]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+208]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+210]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+212]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+214]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+216]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+218]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+220]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+222]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+224]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+226]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+228]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+230]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+232]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+234]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+236]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+238]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+240]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+242]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+244]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+246]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+248]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+250]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+252]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+254]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+256]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+258]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+260]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+262]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+264]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+266]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+268]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+270]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+272]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+274]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+276]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+278]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+280]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+282]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+284]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+286]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+288]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+290]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+292]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+294]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+296]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+298]
//   25   Foo<100>(buf+150); 
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+300]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+302]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+304]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+306]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+308]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+310]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+312]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+314]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+316]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+318]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+320]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+322]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+324]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+326]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+328]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+330]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+332]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+334]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+336]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+338]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+340]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+342]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+344]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+346]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+348]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+350]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+352]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+354]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+356]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+358]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+360]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+362]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+364]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+366]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+368]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+370]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+372]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+374]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+376]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+378]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+380]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+382]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+384]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+386]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+388]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+390]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+392]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+394]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+396]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+398]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+400]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+402]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+404]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+406]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+408]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+410]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+412]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+414]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+416]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+418]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+420]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+422]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+424]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+426]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+428]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+430]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+432]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+434]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+436]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+438]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+440]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+442]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+444]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+446]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+448]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+450]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+452]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+454]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+456]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+458]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+460]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+462]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+464]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+466]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+468]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+470]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+472]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+474]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+476]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+478]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+480]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+482]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+484]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+486]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+488]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+490]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+492]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+494]
        LDRH     R3,[R2, #+0]
        STRH     R3,[R1, #+496]
        LDRH     R0,[R2, #+0]
        STRH     R0,[R1, #+498]
Novice user
Мудрый кот
Сообщения: 1704
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

Re: COOCOX STM32F303 быстрое чтение порта

Сообщение Novice user »

[uquote="jcxz",url="/forum/viewtopic.php?p=3724488#p3724488"][uquote="Novice user",url="/forum/viewtopic.php?p=3724354#p3724354"]У меня ошибки...
исходник пока такой[/uquote]Столько ошибок в элементарном коде.... :shock: Надо всё-таки мануалы читать перед тем как что-то писать. Если конечно не чукча... :)))


PS: Да и вообще - такой код лучше в отдельном асм-файле писать.[/uquote]
я смотрю вы ас в обвинениях,и по вашему чукча-не человек?
я понятия не имею как встроить asm в coocox,мне написали-
[uquote="240265",url="/forum/viewtopic.php?p=3724243#p3724243"]Вот почитай https://radiokot.ru/forum/viewtopic.php?f=59&t=160643[/uquote]
я оттуда и взял код
прошу воздержаться от ответов в этой теме-толку от вас нет,уважаемый ЧЕЛОВЕК!!!или дайте конкретный ответ по теме,если на что-то способны кроме как обозвать обезъяной или что вы там имеете ввиду

Добавлено after 14 minutes 6 seconds:
Re: CooCox STM32F303 быстрое чтение порта
Прошу администраторов закрыть тему
Буду прорываться сам,всех благодарю за участие (и ЧЕЛОВЕКУ jcxz в особенности)
jcxz
Мудрый кот
Сообщения: 1726
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: COOCOX STM32F303 быстрое чтение порта

Сообщение jcxz »

[uquote="Novice user",url="/forum/viewtopic.php?p=3724733#p3724733"]я оттуда и взял код
прошу воздержаться от ответов в этой теме-толку от вас нет,уважаемый ЧЕЛОВЕК!!!или дайте конкретный ответ по теме,если на что-то способны кроме как обозвать обезъяной или что вы там имеете ввиду[/uquote]
Странно... вроде помогал, писал, пояснял... :dont_know: В ответ - какие-то обиды, да ещё 4 минуса влепили. Причём по всему форуму похоже прошли чтобы найти мои сообщения. И не лень было хе$#@й заниматься? Может лучше стоило это время потратить на хотя бы минимальное изучения вопроса и поднятия своего уровня компетенции с уровня плинтуса?
Или у вас критические дни??
Все остальные поняли мои посты, но до вас похоже так и не дошло. После таких "благодарностей" и желания никакого нет помогать таким как вы - бродите и дальше в своих 3-х соснах...
адье!
Novice user
Мудрый кот
Сообщения: 1704
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

Re: CooCox STM32F303 быстрое чтение порта

Сообщение Novice user »

и чем вы помогли? обозвали обезъяной? ваш срач после той строки даже читать не стал
насчет минусов-вы заслужили,если вы себя считаете ЧЕЛОВЕКОМ,а всех остальных обезъянами или кем там,плюса вы точно не заслужили

Добавлено after 1 minute 57 seconds:
буду лепить FIFO буфер,с такими ЧЕЛОВЕКАМИ как jcxz далеко не уедешь
jcxz
Мудрый кот
Сообщения: 1726
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: CooCox STM32F303 быстрое чтение порта

Сообщение jcxz »

[uquote="Novice user",url="/forum/viewtopic.php?p=3724755#p3724755"]и чем вы помогли? обозвали обезъяной? ваш срач после той строки даже читать не стал
насчет минусов-вы заслужили,если вы себя считаете ЧЕЛОВЕКОМ,а всех остальных обезъянами или кем там,плюса вы точно не заслужили[/uquote]
"уважаемый" у вас с головой всё в порядке?? Где я вас или кого-то ещё обезьяной назвал? Или ещё как-то обзывал?
А то что вы изволили назвать "срачем" - была попытка помочь вам же. Если у вас не хватает ума осмыслить советы - я тут не виноват. Да, грешен, больше помогать не буду пытаться.

PS: Похоже точно - критические дни.... :dont_know:
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: COOCOX STM32F303 быстрое чтение порта

Сообщение Reflector »

jcxz, то рабочий код, он работал когда я его показывал в другой теме и сегодня я тоже его проверял. Соответственно никакой MOVW ничего там не читает из 16-ти битного адреса, MOVW и MOVT работают с 16-ти битными константами, константа туда и передается(после компиляции будет: movw r1, #1040). Просто там все делается явно, но конечно можно дать компилятору распределять регистры самостоятельно, это должно быть проще и пару байт он на этом должен сэкономить :)
Novice user
Мудрый кот
Сообщения: 1704
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

Re: CooCox STM32F303 быстрое чтение порта

Сообщение Novice user »

то есть обозвать обезъяной или кем там-помощь? странная у вас помощь,Бог вам судья,уважаемый ЧЕЛОВЕК!!
тема закрыта!
jcxz
Мудрый кот
Сообщения: 1726
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: COOCOX STM32F303 быстрое чтение порта

Сообщение jcxz »

[uquote="Reflector",url="/forum/viewtopic.php?p=3724770#p3724770"]jcxz, то рабочий код, он работал когда я его показывал в другой теме и сегодня я тоже его проверял. Соответственно никакой MOVW ничего там не читает из 16-ти битного адреса, MOVW и MOVT работают с 16-ти битными константами, константа туда и передается[/uquote]
Читает не MOVW, а LDR после него. В том недоразумении, которое трудно назвать кодом, выложенном этим несчастным обиженным человеком.
Вы откройте тот файл, что он сюда постил - увидите. Я говорил про тот код.

Про Ваш код я ничего не говорил, у Вас с адресом всё нормально.
Закрыто

Вернуться в «ARM»