Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Портируемый код - миф или реальность?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Страницы: 1, 2
defunct
Цитата(sensor_ua @ Oct 8 2007, 11:40) *
Если правильно понял, то это работа с кольцевым буфером? Простите, а зачем индексы занулять, если кольцевой?

Обнулять не обязательно конечно, но даже такую конструкцию
head = tail;
надо защищать.

Цитата(_Pasha @ Oct 8 2007, 02:58) *
Думаю, что ОС должны вырастать из схемы целевого устройства. Тогда и весь бардак сойдет на нет. На ОС возложить (писать на асме):

Не всегда есть необходимость ОС писать на ASM.
Например задачи промавтоматики не требуют супер-пупер скорости, и гораздо выгоднее чтобы алгоритм работы ОС хорошо просматривался, в ущерб скорости. ASM вставки можно понять и принять если их неболее 1-2% от всего кода.
Dog Pawlowa
Цитата(sensor_ua @ Oct 8 2007, 11:40) *
Если правильно понял, то это работа с кольцевым буфером? Простите, а зачем индексы занулять, если кольцевой?

Вообще-то это была моя попытка сделать универсальную поддержку портов под линейный и кольцевой буфера с указанием типа буфера в хэдере. Попытка напрасная, так как протокол обмена сильно влияет на логику буферизации. sad.gif Работало в нескольких проектах, а теперь ломаю понемногу.
Обнуление индексов при переполнении кольцевого буфера не помешает - чистить так чистить smile.gif
sensor_ua
Цитата
но даже такую конструкцию
head = tail;
надо защищать.

IMHO, не всегда. Обычно обнуление буфера передачи производится при выключенной передаче.
defunct
Цитата(sensor_ua @ Oct 8 2007, 12:41) *
IMHO, не всегда. Обычно обнуление буфера передачи производится при выключенной передаче.

если обнуление делается при выключенной передаче, тогда какие вопросы к head = tail = 0 (начальная инициализация)? smile.gif
вопрос к __disable_interrupt() / __enable_interrupt() должен быть. ;>
sensor_ua
Цитата
тогда какие вопросы к head = tail = 0 (начальная инициализация)?

Скоропостижное выключение самой передачи наглым уравниванием индексов не встречалwink.gif Потому и озадачился
Прохожий
Цитата(_Pasha @ Oct 8 2007, 03:58) *
Абстракции...
JMP, CALL,ADD, XOR(EOR), RET(RETURN), NOP в конце концов, есть во всех контроллерах. Так на хрена же в одном случае пишется RJMP, а в другом GOTO, JP, JMP ? Получается, что из-за отсутствия мета-мнемоник мы ищем абстракции, перепрыгивая довольно солидный пласт абстракций, содержащийся в кодах операций и операндах?

Эта проблема в промавтоматике закрыта, или частично закрыта. Есть некие примитивные мета-языки LD или FBD. Ими широко пользуются. Проекты с одного ПЛК портируются на другие совершенно без проблем. Но там это дело приводили в порядок такие монстры как SIEMENS и ABB в течение 10 лет.
В области МК, на мой взгляд, это невозможно.

Цитата(_Pasha @ Oct 8 2007, 03:58) *
Еще один прикол - появление псевдо-сишных директив в ассемблерах. Не менее смешно, чем написать TCCR1B+=0x01; и думать, что таймер запустится за 3 цикла.

Целесообразность портирования. Например умножение двух signed int на меге - 19 тактов, на пике -35 . Смысл плавно умирает. Но, если не знать этого - все зашибись!

А зачем портировать с одного 8 битового процессора на другой?

Цитата(_Pasha @ Oct 8 2007, 03:58) *
Думаю, что ОС должны вырастать из схемы целевого устройства. Тогда и весь бардак сойдет на нет. На ОС возложить (писать на асме):
1. Инициализацию всего хозяйства,
2. Все прерывания,
3. Поддерживаемый набор функций через таблицы адресов (как продолжение таблицы векторов прерываний),
4. Сами базовые функции. Конечно, чем меньше их, тем лучше smile.gif
5. Даже арифметику. Как-то заглянул в листинг Mikroelectronika Pascal for dsPIC. Написал (Паскаль):
var A,B,C:real;
begin
B:= 1.0; A:= 3.1415926; C:= A+B+ B*B; biggrin.gif
end.
***** Ё-моё, какая там баранина !!! *****
Ничего DSP-шного не используется. Куча кода в режиме совместимости с PIC18. Вот так...

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

Цитата(sensor_ua @ Oct 8 2007, 09:47) *
Дело в том, что эти понятия формализовано описывают некие механизмы и объекты. Яркий случай - очередь задач. Очередь - объект, явно описанный или неявно, а выполнение последовательности задач (каждой задачи из очереди) - механизм, в зависимости от описания объекта выполняющийся по-разному (что первично, яйцо или курица - отдельный вопрос). Изменение порядка и состава очереди также механизм. Если он явный, то выполняется планировщиком (по причине - некоему событию/сообщению) или/и сопрограммой. И т.д.

Да я просто о том, что при определенных стилях и подходах к программированию в сочетании с величиной проекта можно миновать все эти понятия и получить достаточно надежный результат. При этом человек оперирует совершенно другими абстракциями, таким как конечный автомат, состояние, функция переходов и т. д. Эти абстракции проверены временем. Их трудно испортить субъективизмом проектировщика.
Поэтому и возник вопрос насчет ОС, которую порой пытаются применять там, где в этом нет никакой необходимости. Если нет нужды в применениии монстрообразных МК, то зачем ОС? А если не предусматривается смены платформы, то и С, в общем-то, не нужен.

Цитата(sensor_ua @ Oct 8 2007, 09:47) *
Ну и русский язык вытеснен в этой специфической области за неимением собственных устоявшихся терминов/понятий;(
А врачи говорят на латыни...

Хорошо, давайте попросим автора Рефлекса сделать дополнительно еще и украинский вариант smile.gif .
SasaVitebsk
Цитата(Dog Pawlowa @ Oct 8 2007, 11:13) *
Кстати, есть места, где необходимость управления прерываниями не зависит от разрядности контроллера:
Код
void CTB0(void) //clear transmitt buffer
{   __disable_interrupt();    
    tx_head0=tx_tail0=0; // clear tx buffer indexes
    __enable_interrupt();
}


Для упрощения портирования можно ввести два новых макроса, которые работали бы как разрешение(запрет) прерывания только для 8-разрядного контроллера.


И в добавление скажу что я с аналогичным хомутом (определение свободного места в кольцевом буфере) столкнулся впервые на 80х51 на ASM. И никакой ЯВУ мне не скрывал сути. Я её и так не заметил. smile.gif Поэтому зачем приплетать одно к другому непонятно. Единожды столкнувшись - учитываешь возможность такой ошибки на любом языке.
defunct
Цитата(Прохожий @ Oct 8 2007, 16:53) *
А зачем портировать с одного 8 битового процессора на другой?

Чтобы не зависеть от какого-то конкретного семейства / модели МК.
Вот взять PIC16F877, с позапрошлого года цены на него просто взлетели и сейчас составляют в некоторых точках от $12 за шт. Те же задачи можно переложить на AT89S52 ($1 за шт) или m16 например ($2 за шт).
Прохожий
Цитата(defunct @ Oct 8 2007, 19:06) *
Чтобы не зависеть от какого-то конкретного семейства / модели МК.
Вот взять PIC16F877, с позапрошлого года цены на него просто взлетели и сейчас составляют в некоторых точках от $12 за шт. Те же задачи можно переложить на AT89S52 ($1 за шт) или m16 например ($2 за шт).

Можно было бы взять какой-нибудь 18-ый PIC тоже недорого и ничего не портировать. У Microchip-а c этим делом все в порядке. Своего клиента они не упустят. Даже в 24-х PIC-ах остался целый пласт команд от 18-го (хотя они там и нафиг не нужны), чтобы у людей голова не болела.
Proton
Цитата(Прохожий @ Oct 8 2007, 20:53) *
Хорошо, давайте попросим автора Рефлекса сделать дополнительно еще и украинский вариант smile.gif .
2Прохожий
Сделайте дополнительно ещё и украинский вариант Рефлекса. wink.gif
Прохожий
Цитата(Proton @ Oct 8 2007, 20:02) *
2Прохожий
Сделайте дополнительно ещё и украинский вариант Рефлекса. wink.gif

Это не ко мне, это к автору... Только горилку и сало не забудьте. smile.gif
_Pasha
Цитата(defunct @ Oct 8 2007, 12:13) *
Не всегда есть необходимость ОС писать на ASM.
Например задачи промавтоматики не требуют супер-пупер скорости, и гораздо выгоднее чтобы алгоритм работы ОС хорошо просматривался, в ущерб скорости. ASM вставки можно понять и принять если их неболее 1-2% от всего кода.


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


Цитата(Прохожий @ Oct 8 2007, 16:53) *
А зачем портировать с одного 8 битового процессора на другой?

Кроме ценовых свойств есть еще:
1. Факторы, влияющие на топологию платы. В моем случае (силовая электроника) это уже не смешно.
2. Уникальное сочетание периферии. Например, есть такой PIC18F2431. Там есть HW-модуль обработки инкрементального энкодера. В большинстве случаев юзеру он нафиг не нужен. А тут вдруг- выстрелило некое количество. Какой выход? ИМХО, обогатить модельный ряд, потому что сразу заложить целых три ноги в светлое будущее, в некий универсальный преобразователь частоты - это смерть. Потому что через месяц упорного анализа и переоценки ценностей девайс раздуется до размеров Солнечной Системы.
В общем, моя история больна таким набором МК: ATmega48,AT90PWM3,MC68HC908MR8, PIC18F2431,dsPIC30F2010,dsp56F801. И надо портировать программу, которая уже 2 года "GOOD ENOUGH", но писана для меги 8.

Цитата(Прохожий @ Oct 8 2007, 16:53) *
При этом человек оперирует совершенно другими абстракциями, таким как конечный автомат, состояние, функция переходов и т. д. Эти абстракции проверены временем. Их трудно испортить субъективизмом проектировщика.


Попробую испортить. smile.gif
Все объясняют реализацию конечного автомата какими-то переменными состояния, переходами и т п
Писал когда-то. Тошно. Читать - страшно. Решил автоматизировать. Через таблицы переходов.
Но функциональное наполнение-то осталось. Геморлэнд.
А вот конструкции для параллельного программирования - непрерывные фрагменты кода с переопределяемой точкой входа, тоже вроде как конечный автомат, но результат при реализации на AVR (подчеркиваю, только на AVR) настолько великолепен, что натянет по эффективности/читабельности/простоте отладки добрый десяток альтернатив. Только не портируется, зараза.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.