Перейти к содержанию

Как Изменить Конструкцию Кода На Асме


Kuraga

Рекомендуемые сообщения

Спасибо снова. извинияюсь что не отвечаю - вовсю пишу :) не оставил идеи запилить свое, оказываеться с количеством уже готового железа (перифирии) и таким объемом регистров задача не очень сложная, но долгая правда.

Последний вопрос - посоветую что-нибудь многопотоковое своими руками? Как сделать процессы многопоточными в реальном времени (только не фрее ртос - я занимаюсь этим сексом чтобы вникнуть так сказать вглубь :)

Изменено пользователем Kuraga
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Отводишь место в памяти область, где будут храниться указатели стека каждой задачи. Программишь какой-нибудь таймер, ну или SysTick юзаешь. Вешаешь на него прерывание. Прерывание происходит, адрес возврата из него кладется в стек текущего процесса. Сохраняешь все регистры общего назначения.Дальше, сохраняешь указатель стека текущего процесса в отведенной области. Планировщик выбирает новый процесс. Загружаешь указатель стека адресом вершины стека нового процесса. Восстанавливаешь регистры. Возврат из прерывания. Поскольку стек был заменен, это приведет к запуску нового процесса. Все эти процессы разделяют один тот же код и данные, это и будет многопоточность. Только в ARM есть два стека - пользовательский и ядерный (привилегированный), тут надо смотреть, как правильно все сделать, я в такие подробности не вдавался, но в общем где-то так.

Изменено пользователем Rafiq
Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Кажеться начинаю догонять - по сути нет никакой многопоточности. Правильнее это просто смешивание нескольких задач в один код, таким образом кажется что программа делает все одновременно? На самом деле она выполняет множество задач прыгая между процессами? Это типа контролируемый хаос? извиняюсь что я такой нуб :)

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Грубо говоря, да. Только это не хаос, планировщик использует какой-нибудь алгоритм для выбора следующей задачи. В простейшем случае, это может быть простая очередь без приоритетов. Старая задача, которая только что выполнялась, ставится в хвост очереди, новая выбирается с головы.

Да, сохранять надо не все регистры, а только от R4 до R11 включительно. Остальное сохраняется аппаратно.

Ссылка на комментарий
Поделиться на другие сайты

Извиняюсь что долго пропадал - работа не позволяла мне приблизиться к моей отладочной платке :(

Что ж на асме получилось написать только инициализацию.

Взял несколько готовых примеров на Си, изучаю, в Си вообще слаб.

Пока разбираюсь как использовать функцию которая дана в библиотеке. Т.е. библиотека это же набор готовых функций.

Как их вызвать в своем коде?

Static насколько я понял вызывать нельзя. А вот #ifdef 123 намекает на то, что если в своем коде написать 123 то программа должна отработать. Вот...

Ссылка на комментарий
Поделиться на другие сайты

В инете есть много хороших учебников по С

Тебе надо начать с какого-нибудь учебника, прочитать его сначала, возможно, выполнить упражнения из него, а потом уже браться за разбор готовых примеров, обращаясь к этому учебнику при надобности, уже как к справочнику.

Да, библиотека - это набор готовых функций.

Она состоит из файла собственно библиотеки, который ты должен включить в проект, и заголовочного файла с расширением .h, который ты должен включить в свой исходник директивой #include перед началом своего кода. После этого можно вызывать функции.

Насчет static функций именно в С я тебе не подскажу, но в C++ static применительно к фукциям используется для определения методов (функций) класса, которые можно вызывать без привязки к конкретному объекту, и даже если не создано вообще ни одного объекта этого класса.

Еще один важный квалификатор - volatile. Если у тебя есть глобальная переменная, которая изменяется в обработчике прерываний, а в main() только читается, она должна быть определена как volatile, иначе работать не будет (без volatile компилятор в процессе оптимизации просто выкинет этот код из main()).

#ifdef - это директива препроцессора для условной компиляции, т.е. компиляции того или иного куска кода в зависимости от того, определена или нет "константа", и во время выполнения она недействительна. Ее можно использовать, например, если у тебя может быть один из двух возможных дисплеев в готовом устройстве, скажем, 7 сегментный либо 16 сегментный, тогда ты можешь компилировать код для одного либо для другого, в начале своего файла с кодом надо определить "константу" (неважно, чему она будет равна на самом деле, лишь бы была)

#define DISP16

а где-то в самом коде есть

#ifdef DISP16
 /* код для 16 сегм. дисплея */
#else
 /* код для 7 сегм. дисплея */
#endif

В итоге, если у тебя 16 сегм., в бинарник будет включен только код для 16 сегм., иначе, если 7 сегм., и строки #define DISP16 нет вообще, только код для семисегментника.

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

Предполагается, конечно, что дисплей на все время жизни конкретного экземляра девайса один и меняться не будет :) в противном случае придется определять его во время выполнения, и оба кода будут нужны.

Или, например, можно определить "константу" DEBUG, и во время отладки включать индикацию отладочной информации, а в окончательном варианте убрать ее из кода.

И еще один важный момент - не заморачивайся тем, что есть внутри библиотек. Тебе надо знать только, как пользоваться либой, т.е. что делают функции и как их вызывать, а не то, каким именно образом они это делают (ну, если не ставишь специально цели изучить их).

Изменено пользователем Rafiq
Ссылка на комментарий
Поделиться на другие сайты

Спасибо!

Уже что-то получается!

Написал свою первую функцию-"ругалку" с использованием библиотек - ругаеться если кабель Ethernet не воткнут и

"радуется" если воткнут.

Извиняюсь за качество фоток.

post-190074-0-55370900-1441033012.jpg

post-190074-0-97279900-1441033013.jpg

Ссылка на комментарий
Поделиться на другие сайты

Да интересно и быстро!

Ещё хотел спросить - вот хочу перейти на GCC (Emblocks или что-нибудь свободное) с Keil. В кейле я так понимаю другой компилятор стоит.

Т.е. мне мои несчастные 2 кб кода придется перепиливать?

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Установить диапазон измерения 200Ком. Один  крокодил мультиметра подключить к стоку, другой к истоку. Полярность подключения не имеет значения. Пальцем нужно  руки прикоснуться к затвору. При рабочем транзисторе мультиметр будет показывать меняющиеся показания. MMBF5459 имеет другой тип проводимост и может использоваться при изменённой полярности включения.
    • Затвор исток 700-600 ом что туда что туда,как понимаю он мерт 
    • ТС к чтению относится, как тот кот Васька ...
    • @_abk_ у да, раз речь шла про тиньки, давайте еще сайт микрочипа процитируем для полноты картины...  
    • Да, глянул я эту тему, вроде даже отметился в обсуждении, сейчас уже забыл что конкретно мне не понравилось. МК там не на отображении, чисто так, сервисный. Очень много ключиков, и схема нарисована в диптрейсе, вникать не стал, потому что неудобно для чтения, но скелет понятен. sot-23 на 3 и шесть ног я ещё кое-как приловчился паять. В этих корпусах идут некоторые опорники и китайские чопперы (у них есть вариант в со-8 но он раза в два дороже в чипе). А вот 0805 - уже не мой размерчик, ограничиваюсь 1206, но и то, вы можете видеть, как криво сидят элементы.           По этой причине платка на ADS1210, отметившаяся на фотке выше, была отправлена в помойку. Увидел график нелинейности в даташите, цену на али, и заказал. Пришло, спаял платку, залез в секцию даташита "интерфейс", поковырялся, почитал форумы с обсуждениями подобных АЦП - не выдержал, выпаял всё, кроме АЦП, и провёл ему "видларизацию". Уж больно сложный интерфейс, у 7135 он весьма простой для работы с ардуинкой. Сейчас жду ADS1252 (АЦП близкий к тому, что был использован в В7-87, там ADS1251, немногим помедленнее, зато более линейный), но 7135 не бросаю, потихоньку полируя на ней "ядро" уффффф. Докинув чуть побольше денег можно купить ICL7104-16, которая представляет из себя то же самое, но с 16ти битным счётчиком и выходами под внешние буфер, интегратор и компаратор, что очень хорошо, т.к. можно поставить нормальные быстрые ОУ на полевиках и компарь типа LM311 хотяб.
    • угонял до 0,7 вольта, увы нет.... Транзисторы на плате КТ3102, цоколевка обратная по сравнению с 2N5551   Пересмотрел, реле не читается по фото. Стоит Omron G2RL-14E-12DC
    • Что мешает контролировать этот процесс?  и подавать питание после выхода обоих бп в рабочий режим. Думаю вполне возможно.
×
×
  • Создать...