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

 
 
> Сопоставление проектов С и АСМ, Немного цифр
SasaVitebsk
сообщение Feb 17 2008, 20:18
Сообщение #1


Гуру
******

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



Написал сначала проект на ASM в AVR Studio, а позже очень похожий на Си. И там и там вылизывал по скорости. Точнее особо не вылизывал. В обоих случаях камни с большим запасом. Естественно во втором проекте было всё намного грамотнее построено. Вопервых дробление шагов на основе ШИМ с большим коэффициентом, во вторых более красивое движение стрелок обеспечено. 18 скоростей с плавным переключением. Фильтрация более красивая. Обработка CAN некоторое место занимает. Тем не менее сравнивать можно

Результаты достаточно любопытны для неопределившихся. Попробовал свести в небольшую таблицу. smile.gif

Код
Камень       ! atmega8 ! at90can128 !
язык         !   asm   !    IAR C   !
-------------+---------+------------+
Число ШД     !    6    !     6      !
управл.      ! дрб 6   ! ШИМ дрб 16 !
Вх аналоговые!    6    !     3      !
Вх частотные !    0    !     1      !
Вх CAN       !    0    !     2      !
Цифр. флтр   !    +    ! + более слж!
Плавность    !    -    ! спец алг   !
Авар         !    +    !+ более слж !
-------------+---------+------------+
Размер кода  !  5019   !   6901     !
без доп табл !   -     !    672     !
Итого        !  5019   !   6229     !
Итого %      !   81    !    100     !
RAM          !  241    !    415     !
Итого %      !   58    !    100     !
-------------------------------------

Несколько попозже буду перетаскивать Этот проект на м8. То есть можно будет сопоставить практически 1 к 1 (с учётом значительных улучшений).
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
_Pasha
сообщение Feb 18 2008, 07:58
Сообщение #2


;
******

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



Для меня лично есть одно НО:
вот я использую мультипоточное программирование на асме, стек-фреймы и прочее - так проще и читабельнее выглядят программы. Диспетчеризация кооперативная. При переходе от потока к потоку в свопинге участвуют только содержимое PC и SP. Все крутится на минимальном наборе регистров, потому что большая их часть задействована в прерываниях, в которых тоже свопинга мало. И под такую Homebrew - ось я заточить "С" не смогу никак.
Вот вчера запустил ногодрыгалку на меге 640 по теме, которой я к Вам в личку напрашивался.
Из 15 возможных ШИМ используются все с частотой до 10кГц.
Из 16 АЦП используются все.
+ Дисплей 7 сегментный + клава + 2 модбаса + 1 RS232.
И рад бы я это на "С" написать, потому как времени на это немного, но прикинул, что с учетом неперенесенных наработок и определенной критической массы Time-critical sections, да еще и трудностей с мультипотоком, писанины будет раза в 3 больше.

А тут же параллельно силовая поделка на:
пульт на меге 8 (+модбас)
контроллер: мега48+PIC18f2431 общаются по I2C (+модбас)
Здесь без "С" вообще никуда.

А по качеству кода у меня и к Winavr претензий нет. И что самое приятное - чем тупее/тривиальнее/читабельнее код, тем лучше оптимизация.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Feb 19 2008, 06:54
Сообщение #3


Гуру
******

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



Цитата(_Pasha @ Feb 18 2008, 11:58) *
Для меня лично есть одно НО:
вот я использую мультипоточное программирование на асме, стек-фреймы и прочее - так проще и читабельнее выглядят программы. ...

А что такое стек-фреймы?
Меня первый же безусловный переход вводит в ступор, а второй - в ярость.
Это я так, нисколько не собираясь споров затевать.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 19 2008, 07:59
Сообщение #4


;
******

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



Цитата(Dog Pawlowa @ Feb 19 2008, 09:54) *
А что такое стек-фреймы?
Меня первый же безусловный переход вводит в ступор, а второй - в ярость.
Это я так, нисколько не собираясь споров затевать.

Ну, я сразу все не напишу.
Модель вкратце, остальное по уточняющим вопросам.
Код
.dseg
Entry_Point:   .byte 2
Save_SP:      .byte 2
Local_SP:      .byte 2
Local_Stack:  .byte my_Stack_Size

Var1:            .byte 1
;..............................
VarN:            .byte 2

.set Local_Var_Org = Var1


Это по данным.
Предположим, у нас уже Y адресует начало этого блока данных
Тогда пролог процедуры:
Код
ld zL,Y+
ld zh,Y+; load entry point
in r0,spl
in r1,sph
st Y+,r0; store stack pointer
st Y+,r1

ld r0,Y+
ld r1,Y+
cli
out spL,r0
out sph,r1
sei
; at this line Y points to LOCAL DATA
ijmp; resume procedure execution

Эпилог соответственно восстанавливает все обратно
Очень полезный макрос
Код
.macro leave; <new_entry_point_addr>
  ldi zL,low(@0)
  ldi zh,high(@0)
  jmp Epilogue
.endm

Итого в нашу пользу:
1. Имеем реентерабельные процедуры. Могу выложить пример, где 4 одинаковых процесса крутятся таким образом, выдают инфу каждый на свой индикатор (7-сегм), обрабатывают энкодер как орган управления (правда, плохонько, но претензий нет, я и не работаю над собой)
2. Читабельность зашкаливает
Вместо приснопамятных переменных State мы переопределяем точку входа в процедуру.
Что-нить проверили, кое-какое условие, затем просто пишем leave addr вместо rjmp
Код
Label1:
            call Test_Some_Conditions;
            breq  Label2;
            leave Label1; exits here, but next entry point will be Label1
Label2:; continue program execution


3. Если глубина локального стека позволяет, можно вызывать другие подпрограммы, и если в них использовать leave, все еще интереснее. Т.е. с точки зрения программиста нормальная логика выполнения программ не нарушается.
4. Локальные данные адресуются с помощью yL:yH, намертво закрепленных за указателем
Продолжать ?
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Feb 19 2008, 10:42
Сообщение #5


Гуру
******

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



Цитата(_Pasha @ Feb 19 2008, 11:59) *
Продолжать ?

Нет, спасибо.
Интересно, конечно, но я уже перешел на 'C' и возвращаться не имеет смысла.
Однажды видел проект (система продажи билетов на ЖД эпохи начала перестройки), в котором использование макросов и условной компиляции поражало воображение, но для этого нужна свежая молодая голова.
Too late smile.gif


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- SasaVitebsk   Сопоставление проектов С и АСМ   Feb 17 2008, 20:18
|- - _Pasha   Цитата(Dog Pawlowa @ Feb 19 2008, 13:42) ...   Feb 19 2008, 10:57
- - KRS   Это все не показатель. Если код на С заточить напр...   Feb 18 2008, 08:32
- - SasaVitebsk   2 _pasha. Да с наработками не хочется расставаться...   Feb 18 2008, 15:45
|- - Qwertty   Цитата(SasaVitebsk @ Feb 18 2008, 18:45) ...   Feb 18 2008, 18:33
|- - SasaVitebsk   Цитата(Qwertty @ Feb 18 2008, 22:33) Изви...   Feb 18 2008, 20:17
- - Rst7   Цитатаи использовать его фичи:#pragma inline=force...   Feb 18 2008, 16:19
- - Т.Достоевский   ИМХО. Написать С код соизмеримый с асмом можно, но...   Feb 18 2008, 23:25
|- - IgorKossak   Цитата(Т.Достоевский @ Feb 19 2008, 01:25...   Feb 19 2008, 06:37
|- - SasaVitebsk   Цитата(Т.Достоевский @ Feb 19 2008, 03:25...   Feb 19 2008, 11:42
|- - _Pasha   Цитата(SasaVitebsk @ Feb 19 2008, 14:42) ...   Feb 19 2008, 12:04
- - Igor26   ЦитатаНаписать С код соизмеримый с асмом можно, но...   Feb 19 2008, 06:45
- - Rst7   ЦитатаА вот интеретно, использовали ли Вы такие пр...   Feb 19 2008, 06:50
- - forever failure   Цитата(SasaVitebsk @ Feb 19 2008, 16:42) ...   Feb 19 2008, 13:13
|- - SasaVitebsk   Цитата(forever failure @ Feb 19 2008, 17...   Feb 19 2008, 17:00
- - _Pasha   Теперь немного о другом. Рискую утомить читателя, ...   Feb 20 2008, 08:15
|- - defunct   Цитата(_Pasha @ Feb 20 2008, 10:15) Могу ...   Feb 20 2008, 14:51
- - SasaVitebsk   Не могу сказать, что я точно понял смысл, но попро...   Feb 20 2008, 16:25
- - _Pasha   Цитата(defunct @ Feb 20 2008, 17:51) Стил...   Feb 20 2008, 18:49
|- - SasaVitebsk   Цитата(_Pasha @ Feb 20 2008, 22:49) Пробл...   Feb 20 2008, 21:06
- - _Pasha   Вот это совсем другое дело! Че-то WINAVR торм...   Feb 21 2008, 01:19
|- - AHTOXA   Цитата(_Pasha @ Feb 21 2008, 06:19) Вот э...   Feb 21 2008, 07:20
||- - _Pasha   Цитата(AHTOXA @ Feb 21 2008, 10:20) WINAV...   Feb 21 2008, 07:34
||- - defunct   Цитата(_Pasha @ Feb 21 2008, 09:34) Блин,...   Feb 21 2008, 11:52
||- - _Pasha   Вернемся к нашей баранине. "Не умеешь-научим,...   Feb 21 2008, 16:57
||- - singlskv   Цитата(_Pasha @ Feb 21 2008, 19:57) Кодvo...   Feb 21 2008, 17:49
||- - _Pasha   Цитата(singlskv @ Feb 21 2008, 20:49) Нес...   Feb 22 2008, 07:41
|- - ReAl   Цитата(_Pasha @ Feb 21 2008, 03:19) Вот э...   Feb 21 2008, 08:43
|- - singlskv   Цитата(ReAl @ Feb 21 2008, 11:43) Ну изви...   Feb 21 2008, 22:37
|- - Petka   Цитата(singlskv @ Feb 22 2008, 01:37) Воп...   Feb 22 2008, 07:25
|- - singlskv   Цитата(Petka @ Feb 22 2008, 10:25) Велоси...   Feb 22 2008, 09:45
- - _Pasha   Цитата(defunct @ Feb 21 2008, 14:52) стил...   Feb 21 2008, 19:09
- - Artak   Ребята, может бить мой вопрос покажетса смехотwорн...   Feb 21 2008, 23:25
|- - ReAl   Цитата(Artak @ Feb 22 2008, 01:25) На C п...   Feb 22 2008, 15:27
- - Rst7   ЦитатаА есть вообще грамотный способ решения таких...   Feb 22 2008, 06:29
|- - Artak   Цитата(Rst7 @ Feb 22 2008, 10:29) В IAR...   Feb 26 2008, 20:26
- - _Pasha   Теперь про асм. В контексте многопоточного програм...   Feb 22 2008, 10:47
- - _Pasha   В общем, наигрался я с "С". Память закан...   Feb 22 2008, 23:10
|- - defunct   Цитата(_Pasha @ Feb 23 2008, 01:10) В общ...   Feb 22 2008, 23:37
|- - singlskv   Цитата(_Pasha @ Feb 23 2008, 02:10) В общ...   Feb 22 2008, 23:55
|- - Alex B._   Цитата(singlskv @ Feb 23 2008, 02:55) я н...   Feb 23 2008, 00:03
||- - singlskv   Цитата(Alex B._ @ Feb 23 2008, 03:03) хм,...   Feb 23 2008, 00:08
|- - defunct   Цитата(singlskv @ Feb 23 2008, 01:55) Вот...   Feb 23 2008, 00:10
|- - singlskv   Цитата(defunct @ Feb 23 2008, 03:10) А чт...   Feb 23 2008, 00:43
|- - defunct   Цитата(singlskv @ Feb 23 2008, 02:43) Как...   Feb 23 2008, 01:10
|- - singlskv   Цитата(defunct @ Feb 23 2008, 04:10) Я ко...   Feb 24 2008, 18:47
|- - SasaVitebsk   Цитата(singlskv @ Feb 24 2008, 22:47) Ска...   Feb 24 2008, 19:50
||- - singlskv   Цитата(SasaVitebsk @ Feb 24 2008, 22:50) ...   Feb 24 2008, 22:23
||- - SasaVitebsk   Цитата(singlskv @ Feb 25 2008, 02:23) Уве...   Feb 25 2008, 13:23
|- - defunct   Цитата(singlskv @ Feb 24 2008, 20:47) Ска...   Feb 24 2008, 21:03
- - SasaVitebsk   А мне просто супер нравится С. По-моему, для МК эт...   Feb 23 2008, 00:58
- - SasaVitebsk   Из приведенного мной первого поста видно, что прои...   Feb 23 2008, 11:09
- - Rst7   ЦитатаpChan->vAverage = (pChan->vSum + 4) ...   Feb 23 2008, 20:18
|- - defunct   Цитата(Rst7 @ Feb 23 2008, 22:18) Мне дру...   Feb 24 2008, 04:54
- - Rst7   Все... Туплю. Уже и ответ пространный написал, хор...   Feb 24 2008, 10:40
- - Непомнящий Евгений   По-моему, с heap основная проблема в том, как расс...   Feb 26 2008, 09:29
- - singlskv   Цитата(Непомнящий Евгений @ Feb 26 2008, 12...   Feb 26 2008, 10:39
|- - SasaVitebsk   Цитата(singlskv @ Feb 26 2008, 14:39) Про...   Feb 26 2008, 11:50
- - defunct   Цитата(Непомнящий Евгений @ Feb 26 2008, 11...   Feb 26 2008, 11:21


Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 06:05
Рейтинг@Mail.ru


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