Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
1

Аналог CPUID для AVR

25.08.2018, 21:27. Показов 1172. Ответов 27
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Собираюсь написать библиотеку, которая использует таймер 0 (в идеале - любой по дефайну пользователя, но это вопрос второстепенный), но в разных МК таймер реализован различным набором регистров, да ещё и расположенных по разным адресам. Соответственно, вопрос - может ли МК каким-либо образом определить свою модель, и где у него например находится регистр, отвечающий за делитель таймера 0? Например, путём проверок срабатывания различных резервных битов, в которые не происходит запись, и они читаются всегда в одинаковом состоянии. Или может быть это возможно реализовать директивами компилятора (вариант перебора всех моделей не предлагать)?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.08.2018, 21:27
Ответы с готовыми решениями:

Не удается запустить параллельный программатор для AVR (аналог STK500)
т.что собрал Параллельный программатор для АВР - аналог STK500 инфу взял...

Аналог AVR studio под мобильные устройства
Здравствуйте, уважаемые форумчане. У меня вопрос такой: есть ли аналоги AVR studyo для мобильных...

Аналог устройства ПВ-1 приемника Альтаир ПТ-305 на AVR
У кого есть схема аналога устройства программно-временного ПВ-1 приемника "Альтаир" ПТ-305 на AVR...

Отчет AIDA64 для Intel® Core™ i7-3770 (CPUID)
Привет ! Парни, у кого есть процессор Intel® Core™ i7-3770 - можете сделать отчет в программе...

CPUID
Доброго времени суток! Я сейчас делаю лабораторную работу, где нужно вывести информацию о...

27
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
26.08.2018, 19:49  [ТС] 21
Author24 — интернет-сервис помощи студентам
Пока что нашёл компромиссное решение объявить тип таймера 0
C
1
#define TIMER0_TYPE 1
где 1 - реализация через TCCR0, 2 - через TCCR0A/B.
И далее
C
1
2
3
4
5
6
7
#if TIMER0_TYPE==1
 <набор операций 1>
#elif TIMER0_TYPE==2
 <набор операций 2>
#else
 #error Invalid TIMER0 type!
#endif
0
6770 / 2739 / 384
Регистрация: 17.02.2013
Сообщений: 4,047
27.08.2018, 16:19 22
Цитата Сообщение от Kukuxumushu Посмотреть сообщение
А путь в никуда - это прописывать условную компиляцию под каждый из 200 камней
Нарисуй генератор библиотек - виндозную прогу, в которой бы пользователь выбирал типа камня, нажимал кнопку SAVE и на диск шлепался бы вариант библиотеки именно под этот камень.
0
Эксперт CЭксперт С++
5113 / 4552 / 854
Регистрация: 07.10.2015
Сообщений: 9,462
27.08.2018, 17:09 23
Цитата Сообщение от Kukuxumushu Посмотреть сообщение
может ли МК каким-либо образом определить свою модель
В принципе, может. Для этой цели служит регистр SPMCSR, после установки бита SIGRD можно прочитать три байта сигнатуры, однозначно определяющие камень.

Но! Тогда придется хранить таблицу ВСЕХ сигнатур для всех камней и таблицы ВСЕХ подпрограмм. Лично мне не хочется впустую тратить порой весьма драгоценное место в программной памяти... Имхо, это тупиковый путь.

Гораздо лучше, как советовали выше, условная компиляция. Как говорит мой товарищ, "у компа мозгов больше", пусть хранит все многообразие ашек и либов... А в проекте будет только то, что надо.
0
6770 / 2739 / 384
Регистрация: 17.02.2013
Сообщений: 4,047
27.08.2018, 17:55 24
Цитата Сообщение от liv Посмотреть сообщение
Но! Тогда придется хранить таблицу ВСЕХ сигнатур для всех камней
Но сам регистр SPMCSR есть не на всех камнях, даже среди тех, что имеют инструкцию spm. А на тех у которых нет spm ему и вовсе неоткуда взяться.
0
Эксперт CЭксперт С++
5113 / 4552 / 854
Регистрация: 07.10.2015
Сообщений: 9,462
27.08.2018, 18:50 25
Ethereal, согласен, не на всех. Те, у кого нет, отвечают сигнатурой на внешнюю команду. Изнутри допуска нет.
Ну тогда, по-любому, для универсальности, только условная компиляция.

Добавлено через 6 минут
Ethereal, есть камни, у которых SPMCSR есть, а прочитать сигнатуру нет возможности. Только fuses, lock да self programming...
Но это только подтверждение выше сказанного

Добавлено через 37 минут
Kukuxumushu, если заглянуть в папку lib, например, компилятора WINAVR, то можно увидеть множество подпапок с разными версиями библиотек для разных конфигураций... Так что, другого пути нет... Все так делают...
0
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
27.08.2018, 19:13  [ТС] 26
Цитата Сообщение от liv Посмотреть сообщение
Kukuxumushu, если заглянуть в папку lib, например, компилятора WINAVR, то можно увидеть множество подпапок с разными версиями библиотек для разных конфигураций... Так что, другого пути нет... Все так делают...
Если вы невнимательно прочитали тему, то альтернативный путь я всё-таки нашёл. И пока что он меня вполне устраивает. Один лишний дефайн не стоит того, чтобы писать сотни реализаций одного и того же. Мне сейчас вот этот вопрос больше интересен.
0
Эксперт CЭксперт С++
5113 / 4552 / 854
Регистрация: 07.10.2015
Сообщений: 9,462
28.08.2018, 11:02 27
Kukuxumushu, видел я, можете не сомневаться... Это и есть условная компиляция...
Сам так делаю в программах на асме (а пишу только на асме).
Очень удобно конфигурировать для разных ситуаций.

Как помочь во втором вопросе, не знаю. У меня не получилось. Кстати, в асме таких проблем нет
0
1976 / 1275 / 130
Регистрация: 04.01.2010
Сообщений: 4,607
28.08.2018, 12:37 28
...мне кажется, это сизифов труд. Обычно архитектура софта строится на принципе HW->HAL->LIB->APP. То есть вы разделяете функцию в LIB, оставляя поле для предефайнов из HAL, который уже как правило HW-specific. То есть "по 100 раз" придется написать HAL, но LIB останется почти без изменений (кода). По крайней мере это грамотный подход, когда в LIB вы уже ничего трогать не будете, даже при добавлении нового чипа. Достаточно будет просто добавить новый файлик в список HAL
1
28.08.2018, 12:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.08.2018, 12:37
Помогаю со студенческими работами здесь

AVR JTAG mkI + avarice + avr-gdb + Linux
По какой то неведомой причине мне причине не могу нормально подключится к серверу avarice через...

AVR AVRISP STK500 V3.0 USB ISP Programmer for AVR IC
Люди помогите плз. не могу разобраться. приобрел этот чудный девайс (AVR AVRISP STK500 V3.0 USB...

Подмена CPUID
В компе стоит процессор Core2Quad Q8300, плата Asus P5B VM-SE, плата оффициально не держит его, но...

CPUID и FeatureSet
Доброго времени! Подскажите пожалуйста такой момент: Я использую в своей проге код на Ассемблере...

Cpuid информация
У меня Visual Studio 2010, создал Win32 консольное приложение, и нашел код в инете, вставил....

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru