реклама на сайте
подробности

 
 
5 страниц V  « < 2 3 4 5 >  
Reply to this topicStart new topic
> Портируемый код - миф или реальность?
mse
сообщение Oct 8 2007, 06:13
Сообщение #46


Знающий
****

Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693



Этта...Смотрю, читаю...;О) ИМХО моё такое. Ц- не ЯВУ. Это некий асемблер для абстрактного процессора. Поэтому "Ц vs АСМ", смысла не имеет. Ессно, переносимость с "АСМ" на "АСМ" будет легче, чем с АСМ на АСМ.
Бо ЯВУ ращщитаны, ИМХО, на работу с датыми, работа с аппаратурой спрятана от программера в ОСи и либраритеках, а в эмбеддерстве немаловажное значение имеет имана работа с жылезом. Поэтому от конструкций типа TCCR1=real_time_tick_data или PORTx=all_leds_on никто не застрахован, даже в языке самово-самово ВУ. В этом смысле, ЯВУ для МК, штука частично фиктивная.
Значить, карма у нас такая - ручками шоркать битики. А тут уж, автоматизировать процесс переноса шорканья, кто во что горазд. ;О)
Go to the top of the page
 
+Quote Post
forever failure
сообщение Oct 8 2007, 07:14
Сообщение #47


Местный
***

Группа: Участник
Сообщений: 256
Регистрация: 6-03-05
Из: Екатеринбург
Пользователь №: 3 112



Бубен как бубен. Похлещще видывали, эт даже не бубен, а так, бубенчик. Чо к чему в попу тарахтеть на четыре страницы, на асме точ так же на такие же грабли можно наступить.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Oct 8 2007, 08:03
Сообщение #48


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



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


... И за этими громкими понятиями часто кроется очень мало программного кода. Надо тему открыть по поводу параллельного программирования на avrasm.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Oct 8 2007, 08:13
Сообщение #49


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(mse @ Oct 8 2007, 09:13) *
...Значить, карма у нас такая - ручками шоркать битики. .. ;О)

Угу, ночью думал, что у меня за карма, и пришел к печальному выводу, что более-менее умею только это smile.gif
Недавно переносил один проект в 16-ти разрядного на 8-разрядный.
Может, конечно, и пропустил пару мест, но в целом не так то и много их, где одна и та же двухбайтовая переменная модифицируется и в прерывании, и в теле, а уж в разных прерываниях вообще нет.
Если лень текст просмотреть, то конечно, ОС поможет biggrin.gif

Кстати, есть места, где необходимость управления прерываниями не зависит от разрядности контроллера:
Код
void CTB0(void) //clear transmitt buffer
{   __disable_interrupt();    
    tx_head0=tx_tail0=0; // clear tx buffer indexes
    __enable_interrupt();
}


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


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
sensor_ua
сообщение Oct 8 2007, 08:40
Сообщение #50


Профессионал
*****

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Цитата
Кстати, есть места, где необходимость управления прерываниями не зависит от разрядности контроллера:
void CTB0(void) //clear transmitt buffer
{ __disable_interrupt();
tx_head0=tx_tail0=0; // clear tx buffer indexes
__enable_interrupt();
}

Если правильно понял, то это работа с кольцевым буфером? Простите, а зачем индексы занулять, если кольцевой?


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
defunct
сообщение Oct 8 2007, 09:13
Сообщение #51


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(sensor_ua @ Oct 8 2007, 11:40) *
Если правильно понял, то это работа с кольцевым буфером? Простите, а зачем индексы занулять, если кольцевой?

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

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

Не всегда есть необходимость ОС писать на ASM.
Например задачи промавтоматики не требуют супер-пупер скорости, и гораздо выгоднее чтобы алгоритм работы ОС хорошо просматривался, в ущерб скорости. ASM вставки можно понять и принять если их неболее 1-2% от всего кода.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Oct 8 2007, 09:29
Сообщение #52


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(sensor_ua @ Oct 8 2007, 11:40) *
Если правильно понял, то это работа с кольцевым буфером? Простите, а зачем индексы занулять, если кольцевой?

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


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
sensor_ua
сообщение Oct 8 2007, 09:41
Сообщение #53


Профессионал
*****

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Цитата
но даже такую конструкцию
head = tail;
надо защищать.

IMHO, не всегда. Обычно обнуление буфера передачи производится при выключенной передаче.


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
defunct
сообщение Oct 8 2007, 10:40
Сообщение #54


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



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

если обнуление делается при выключенной передаче, тогда какие вопросы к head = tail = 0 (начальная инициализация)? smile.gif
вопрос к __disable_interrupt() / __enable_interrupt() должен быть. ;>
Go to the top of the page
 
+Quote Post
sensor_ua
сообщение Oct 8 2007, 11:10
Сообщение #55


Профессионал
*****

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Цитата
тогда какие вопросы к head = tail = 0 (начальная инициализация)?

Скоропостижное выключение самой передачи наглым уравниванием индексов не встречалwink.gif Потому и озадачился


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
Прохожий
сообщение Oct 8 2007, 13:53
Сообщение #56


Cундук
*****

Группа: Участник
Сообщений: 1 478
Регистрация: 13-11-06
Из: Ростов-на-Дону
Пользователь №: 22 269



Цитата(_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 .
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Oct 8 2007, 13:58
Сообщение #57


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(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 Поэтому зачем приплетать одно к другому непонятно. Единожды столкнувшись - учитываешь возможность такой ошибки на любом языке.
Go to the top of the page
 
+Quote Post
defunct
сообщение Oct 8 2007, 15:06
Сообщение #58


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



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

Чтобы не зависеть от какого-то конкретного семейства / модели МК.
Вот взять PIC16F877, с позапрошлого года цены на него просто взлетели и сейчас составляют в некоторых точках от $12 за шт. Те же задачи можно переложить на AT89S52 ($1 за шт) или m16 например ($2 за шт).
Go to the top of the page
 
+Quote Post
Прохожий
сообщение Oct 8 2007, 15:32
Сообщение #59


Cундук
*****

Группа: Участник
Сообщений: 1 478
Регистрация: 13-11-06
Из: Ростов-на-Дону
Пользователь №: 22 269



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

Можно было бы взять какой-нибудь 18-ый PIC тоже недорого и ничего не портировать. У Microchip-а c этим делом все в порядке. Своего клиента они не упустят. Даже в 24-х PIC-ах остался целый пласт команд от 18-го (хотя они там и нафиг не нужны), чтобы у людей голова не болела.
Go to the top of the page
 
+Quote Post
Proton
сообщение Oct 8 2007, 16:02
Сообщение #60


Частый гость
**

Группа: Свой
Сообщений: 185
Регистрация: 3-08-05
Из: Новосибирск
Пользователь №: 7 334



Цитата(Прохожий @ Oct 8 2007, 20:53) *
Хорошо, давайте попросим автора Рефлекса сделать дополнительно еще и украинский вариант smile.gif .
2Прохожий
Сделайте дополнительно ещё и украинский вариант Рефлекса. wink.gif


--------------------
Всяк хорошая мысля к нам приходит опосля.
Go to the top of the page
 
+Quote Post

5 страниц V  « < 2 3 4 5 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 19:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01517 секунд с 7
ELECTRONIX ©2004-2016