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

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
Ответить с цитатой

Денис
 


Не вкурю, можно ли (и каким образом) реализовать на AVR аппаратный ШИМ на два канала, на таймере "1" с максимальным счетом (TOP) = 0хFFFF? Почему в базовом варианте для режима ШИМ максимальный счет = 0x03FF, когда счетчик 16-битный?

Добавлено: Fri Feb 04, 2022 7:46 pm
Ответить с цитатой

Николай
 


полуаппаратно. со сменой состояния пина в прерывании

Добавлено: Fri Feb 04, 2022 11:14 pm
Ответить с цитатой

Денис
 


МК atmega328p, Таймер-1 установлен в Нормальный режим (TOP=0xFFFF).
Режим выхода (ножка PB1) установлен в "Clear on compare match", то есть переключение в ноль по достижению счетчиком TCNT1 значения, записанного в OCR1A.
В коде, в теле прерывания по переполнению таймера, устанавливаю обратно выходную ножку в высокий уровень (PB1). Она должна быть включена до момента, пока опять не сбросится таймером по достижению счетчиком значения OCR1A.

А работает на практике это так: выход PB1 всегда с низким уровнем. Причем если настроить этот выход в противоположный режим "Set on compare match" (и обнулять в прерывании), то PB1 наоборот всегда с высоким уровнем.

Почему таймер не дает вручную установить высокий уровень на PB1 в теле прерывания? Зачем тогда этот режим обнуления таймером, если установка потом невозможна? Не догоню не знаю

Добавлено: Sat Feb 05, 2022 8:29 pm
Ответить с цитатой

SilverRay
 


Если ты используешь ногодрыг от таймера, это же альтернативная функция вывода вроде. Соответственно, можешь ли ты из прерывания вручную ногу дернуть?

Добавлено: Sat Feb 05, 2022 9:38 pm
Ответить с цитатой

Денис
 


Ну вот по факту, получается что не могу. Но вопрос остается: зачем тогда этот режим обнуления таймером, если установка (вручную) потом невозможна? Если возможна, то как ее сделать?
Иначе получается, что какая-то одноразовая функция: при первом срабатывании compare match, ножка прижимается к земле, и до конца веков там остается.
Если найти вариант как ее поднимать из прерывания, то можно сделать двухканальный 16-битный ШИМ (когда TOP=0xFFFF и дергаются независимо две ножки - по совпадению с OCR1A и с OCR1B).
Другого варианта сделать двухканальный 16-бит ШИМ на atmega328p не нашел.

Добавлено: Sat Feb 05, 2022 9:53 pm
Ответить с цитатой

Seriyvolk
Бездельник


Заводишь просто таймер. По его прерыванию делаешь с ногами всё, что тебе нужно. Хоть с одной, хоть с несколькими. Николай тебе об этом говорил.

Добавлено: Sat Feb 05, 2022 10:03 pm
Ответить с цитатой

SilverRay
 


Да и готовых примеров программно-аппаратных многоканальных ШИМов вроде выложено в сети немало.

Добавлено: Sat Feb 05, 2022 10:04 pm
Список разделов Flyback.org.ru » не HV » Микроконтроллеры и всё, что с ними связано
На страницу Пред.  1, 2, 3 ... 134, 135, 136 ... 151, 152, 153  След.     Просмотр темы целиком



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

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