Список разделов Flyback.org.ru » не HV » Микроконтроллеры и всё, что с ними связано
Тему сейчас просматривают - зарегистрированных: 0, скрытых: 0 и гостей: 0
Зарегестрированные - Нет
Ответить с цитатой

N1X
 


Ну можно занять их "своими" переменными https://gcc.gnu.org/onlinedocs/gcc/Local-Registe...egister-Variables
А нафейхуа это нужно?

Добавлено: Sun Oct 17, 2021 10:18 am
Ответить с цитатой

Электромонтёр
 


когда арм уходит в прерывания, то перед процедурой он ныкает в стек R0-R3 и R12, а после выполнения процедуры достаёт эти регистры обратно и возвращается к выполненной программе. Хотелось чтоб обработчик не трогал регитры, кроме заныканных R0-R3 и R12. У меня частота прерываний 200к в секунду и уже сожрано 80% машинного времени. Да, большего из проца видимо уже не выжать. Простое измерение координат с четырёх резольверов пожалуй хватит Smile Но с генерацией квадратурных импульсов имитации энкодеров костыль - импульсы выдаются пачками с частотой пачек 2 кГц и частотой импульсов до 50 кГц. На более равномерное распределение импульсов у меня просто нет машинных ресурсов.

Добавлено: Sun Oct 17, 2021 12:27 pm
Ответить с цитатой

Николай
 


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

Добавлено: Sun Oct 17, 2021 2:02 pm
Ответить с цитатой

N1X
 


Электромонтёр писал(а):
Но с генерацией квадратурных импульсов имитации энкодеров костыль -
А кроме оцифровки резольверов там что-то есть? Может туда плисину воткнуть, и будет все параллельно и перпендикулярно?

Добавлено: Sun Oct 17, 2021 2:37 pm
Ответить с цитатой

Mouse Oxalate
 


Так резольвер выдает аналоговый сигнал, для ПЛИС нужен будет АЦП (на два канала). И на возбуждение резольвера нужно генерить переменку.

Добавлено: Sun Oct 17, 2021 2:47 pm
Ответить с цитатой

Кейс
 


Если я не ошибаюсь, то нужно сказать компилятору что функция - обработчик прерывания, тогда он не будет трогать регистры общего назначения
https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Fun...er-functions-2886 правда хз будет ли это работать в данном случае...

Добавлено: Sun Oct 17, 2021 3:15 pm
Ответить с цитатой

Электромонтёр
 


N1X писал(а):
А кроме оцифровки резольверов там что-то есть?

Оцифровка резольверов и герерация квадратурных импульсов. Вывод на ЖКИ в фоне.

N1X писал(а):
Может туда плисину воткнуть, и будет все параллельно и перпендикулярно?

Да вроде влез в имеющиеся времянки. Правда, 85% процессорного времени в среднем, в пике до 100%, но проц успевает (по осциллографу). Однако, из К1986ВЕ92QI в плане быстродействия выжато почти всё.

Николай писал(а):
такой кунг-фу только ввиде ассемблера

Чёт пока не совсем ясно как на армах ассемблерить. Пока ассемблерные примеры или не собираются или завешивают ядро.

Добавлено: Sun Oct 17, 2021 3:29 pm
Ответить с цитатой

Warlock_Wolf
 


Электромонтёр писал(а):
стек R0-R3 и R12
убери все "push {r0-r12}\n\t"
и достань все "pop {r0-r12}\n\t"

__asm__(
"push {r0-r12}\n\t"
: ::
"r0"//,"r1","r2","r3","r4"//,"r5","r6","r7","r8","r9","r10","r11","r12" -- это говорит компилятору что нулевой регистр не использовать. те что открыты, те и не использовать. но все нельзя, иначе он тебя пошлет, ему-то надо как то дальше работать подмигивает
)

Добавлено: Sun Oct 17, 2021 5:50 pm
Ответить с цитатой

Электромонтёр
 


А как gcc заставить для cortex-m3 расположить функцию в оперативке?

объявлял перед функцией
Код:
__attribute__((section(".data")))
чёт никакого эффекта.

Добавлено: Sat Oct 23, 2021 1:58 pm
Ответить с цитатой

Warlock_Wolf
 


__ramfunc
void Yadro_mem_init(void)
{
}

это в iar. пишем в .с

void Yadro_mem_init() __attribute__ ((section(".bootDNAcore"))); а вот так в sdk vivado и пишем в хидере .h

Добавлено: Sat Oct 23, 2021 4:34 pm
Ответить с цитатой

Электромонтёр
 


Эээ, не совсем понятно, а как функция из флещь копируется в ОЗУ?

Добавлено: Sat Oct 23, 2021 5:42 pm
Ответить с цитатой

Warlock_Wolf
 


я уж сейчас не вспомню. но компилятор умный. там только области памяти надо правильно задать.

Добавлено: Sat Oct 23, 2021 6:05 pm
Ответить с цитатой

N1X
 


Электромонтёр писал(а):
как gcc
Warlock_Wolf писал(а):
это в iar
Отлично поговорили )))

Добавлено: Sat Oct 23, 2021 7:38 pm
Ответить с цитатой

Электромонтёр
 


N1X писал(а):
Отлично поговорили )))

NIX, у меня CooCox и GCC, но советы для Jar не заработали.

Добавлено: Sat Oct 23, 2021 8:25 pm
Ответить с цитатой

N1X
 


Ну так правильно, иар использует свой проприетарный компилятор...

Добавлено: Sat Oct 23, 2021 9:14 pm
Ответить с цитатой

Warlock_Wolf
 


так это путь. а дальше поискать в инете.

вот для гцц. из инета.

void foo (void) __attribute__ ((section(".ramfunc")));
__attribute__ ((section(".data"))); - это для констант размещенных в RAM

и я написал, надо празбираться с областями памяти. .ramfunc .data .... какая под константы, какая под переменные. посмотреть адреса прописанные. посмотреть пдф на железку, что куда писать.

в xilinx sdk походу gcc . там целый фаил lscript.ld который занимается распределением памяти. это данные для линкера и компилятора.

Добавлено: Sat Oct 23, 2021 11:57 pm
Ответить с цитатой

Электромонтёр
 


Warlock_Wolf писал(а):
__ramfunc

GCC ругается на __ramfunc

__attribute__ ((section(".ramfunc"))) не помогает

Добавлено

В GCC... ...отсутствует флаг для получения копии секции. Дополнить LD скрипт <<магическими строками>> так же не удастся.

Ладно, отложим покамест.

Добавлено: Sun Oct 24, 2021 4:33 am
Ответить с цитатой

Электромонтёр
 


По просьбе Миландра тиснул статейку на Хабре.

Добавлено: Sun Nov 21, 2021 7:38 pm
Список разделов Flyback.org.ru » не HV » Микроконтроллеры и всё, что с ними связано
На страницу Пред.  1, 2, 3 ... 133, 134, 135     Просмотр темы целиком



Лицензионное соглашение

(c)Flyback.org.ru
Российское общество любителей высоких напряжений.
Использование материалов с данного сайта и форума возможно только с разрешения администрации.