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

 
 
> Сопоставление проектов С и АСМ, Немного цифр
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 20 2008, 18:49
Сообщение #2


;
******

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



Цитата(defunct @ Feb 20 2008, 17:51) *
Стиль значит асмовый используется.. Попробуйте писАть на С, а не на asm сишными словами.
Одинаковые значения в eeprom тоже никто не заставляет писать, в функции записи байта сделать вычитку ячейки, совпадает с тем что пишем - выход.

1. Дописываю тот же кусок кода на асме. Для сравнения. Получается в полновесном варианте, со всеми обработками ошибок, с поиском правильной команды и с таблицей - меньше 200 байт. Завтра выложу в аттаче, дабы не превращать тему в "кодовый флуд". По поводу "писАть на С" - я "С" терпеть не могу еще с 1992 года smile.gif Проблемы-то начинаются с обращения к памяти программ за данными. Этот процесс нигде не автоматизирован, отсюда сложности.
2. Переопределять стандартные функции НЕ ХОЧУ.

Цитата(SasaVitebsk @ Feb 20 2008, 19:25) *
Не могу сказать, что я точно понял смысл, но попробую. Хотя если из другой оперы - то извиняй. (Мне кажется я делал что-то подобное)

Смысл: Хранение в девайсе настроечных параметров и обращение к ним, например, через команды по последовательному порту.

Цитата
... он свой диспетчер кучи написал и работает с занятием/освобождением весьма грамотно. У меня, принципиально, возможны проколы в данном месте - я это знаю.

Вот! Там, где дело касается ОЗУ - ессно "С" выиграет.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Feb 20 2008, 21:06
Сообщение #3


Гуру
******

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



Цитата(_Pasha @ Feb 20 2008, 22:49) *
Проблемы-то начинаются с обращения к памяти программ за данными. Этот процесс нигде не автоматизирован, отсюда сложности.
2. Переопределять стандартные функции НЕ ХОЧУ.
Смысл: Хранение в девайсе настроечных параметров и обращение к ним, например, через команды по последовательному порту.
Вот! Там, где дело касается ОЗУ - ессно "С" выиграет.

Никаких проблем при обращении к памяти программ за данными я не заметил. Обращаешься так же как и к обычной переменной. Более того код получается очень эффективным. Пересылать абсолютно ничего не надо. По крайней мере в IAR.
В редких случаях, когда идут разнотипные данные компилятору приходится явно указывать что идёт обращение к flash.
Например
Код
// Знакогенераторы
const    void    __flash   *symbol[MAX_FONTS] = {&fnt0_6x8,&fnt1_8x8,&fnt2_10x10,&fnt3_11x13,&fnt4_9x14,&fnt5_16x16,&fnt6_16x16,&fnt7_12x13,&fnt8_16x15,&fnt9_14x16};
....
uint8_t __flash  *addr;
.....
     addr =    ((uint8_t __flash *)symbol[tekfonts])+(Znak*Fonts[tekfonts][1]);
.....

А обычно и этого делать не приходится
Код
// структура данных по символам
struct CharZnak
{
uint16_t            sm;                        // Смещение от начала фонта
uint8_t            width;                    // Ширина символа
};

//extern             uint16_t                __checksum;        //    CHECKSUM;
//const __flash    uint16_t                EndFlashAdr @0xe5 = & __checksum;

extern const    uint8_t        __flash        Fonts[MAX_FONTS][2];
extern const __flash struct    CharZnak    struct_fnt[MAX_FONTS-2][223];
....
    symbolx=struct_fnt[tekfonts-2][Znak].width + tekkern;


Вот пример компиляции
Код
   1038              symbolx=struct_fnt[tekfonts-2][Znak].width + tekkern;
   \   0000002C   ....               LDI     R30, LOW((struct_fnt - 1336))
   \   0000002E   ....               LDI     R31, HIGH((struct_fnt - 1336))
   \   00000030   5221               SUBI    R18, 33
   \   00000032   E003               LDI     R16, 3
   \   00000034   9F02               MUL     R16, R18
   \   00000036   0DE0               ADD     R30, R0
   \   00000038   1DF1               ADC     R31, R1
   \   0000003A   E90D               LDI     R16, 157
   \   0000003C   E012               LDI     R17, 2
   \   0000003E   9F14               MUL     R17, R20
   \   00000040   2D10               MOV     R17, R0
   \   00000042   9F04               MUL     R16, R20
   \   00000044   0D11               ADD     R17, R1
   \   00000046   0DE0               ADD     R30, R0
   \   00000048   1FF1               ADC     R31, R17
   \   0000004A   9104               LPM     R16, Z
   \   0000004C   0F06               ADD     R16, R22
   \                     ??ZnakWidth_1:
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- SasaVitebsk   Сопоставление проектов С и АСМ   Feb 17 2008, 20:18
- - _Pasha   Для меня лично есть одно НО: вот я использую мульт...   Feb 18 2008, 07:58
|- - Dog Pawlowa   Цитата(_Pasha @ Feb 18 2008, 11:58) Для м...   Feb 19 2008, 06:54
|- - _Pasha   Цитата(Dog Pawlowa @ Feb 19 2008, 09:54) ...   Feb 19 2008, 07:59
|- - Dog Pawlowa   Цитата(_Pasha @ Feb 19 2008, 11:59) Продо...   Feb 19 2008, 10:42
|- - _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   Вот это совсем другое дело! Че-то 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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