Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Си для AVR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Страницы: 1, 2
singlskv
Цитата(Т.Достоевский @ Sep 4 2007, 01:11) *
Дело в том что Я уже 5 лет как не пишу софт сам. Его за меня пишут люди, причём на С.

ldi r18,8 ;такой задачи не разу небыло
ldd r16,data ; код абсолютно переносимый
clr r17

m1:rol r16
ror r17
dec r18
brne m1 ; могу добавить на i51 pic16, holtec, ARM. если конечно вспомню где это всё лежит

std data,r16

Ну, пока результат мягко говоря не очень smile.gif
Для поднятия тонуса сообщу Вам что данная задачка решается на AVR за 13 тактов...
fmdost
Цитата(singlskv @ Sep 4 2007, 01:21) *
Ну, пока результат мягко говоря не очень smile.gif
Для поднятия тонуса сообщу Вам что данная задачка решается на AVR за 13 тактов...

А пример? Яж в булевых функциях не силён.
singlskv
Цитата(Т.Достоевский @ Sep 4 2007, 01:24) *
А пример? Яж в булевых функциях не силён.
пример будет после того как Вы скажете что нужно писать на С или предоставите
общественности код для данной задачки хотябы за 15 тактов smile.gif (ШУЧУ)
Вобщем-то Вы уже раскрылись, написть быстрый код на асм Вы не очень то умеете...
Но спорите...
Я типа вроде как умею писать быстро и на С и на асм,
а код типа такой:
Код
;  13 words / 13 cycles
       ; tmp=  abcdefgh
  mov    tmp2,tmp       ; tmp2= abcdefgh
  andi   tmp2,0b01010101; tmp2= 0b0d0f0h
  andi   tmp, 0b10101010; tmp=  a0c0e0g0
  bst    tmp2,0         ;                 T=h
  lsr    tmp2           ; tmp2= 00b0d0f0
  bld    tmp2,7         ; tmp2= h0b0d0f0
  lsl    tmp            ; tmp=  0c0e0g00  C=a
  adc    tmp, tmp2      ; tmp=  hcbedgfa
  mov    tmp2,tmp       ; tmp2= hcbedgfa
  andi   tmp2,0b01100110; tmp2= 0cb00gf0
  swap   tmp2           ; tmp2= 0gf00cb0
  andi   tmp, 0b10011001; tmp=  h00ed00a
  add    tmp, tmp2      ; tmp=  hgfedcba
fmdost
Цитата(singlskv @ Sep 4 2007, 01:44) *
пример будет после того как Вы скажете что нужно писать на С или предоставите
общественности код для данной задачки хотябы за 15 тактов smile.gif (ШУЧУ)
Вобщем-то Вы уже раскрылись, написть быстрый код на асм Вы не очень то умеете...
Но спорите...
Я типа вроде как умею писать быстро и на С и на асм,
а код типа такой:
Код
;  13 words / 13 cycles
     ; tmp=  abcdefgh
  mov    tmp2,tmp     ; tmp2= abcdefgh
  andi   tmp2,0b01010101; tmp2= 0b0d0f0h
  andi   tmp, 0b10101010; tmp=  a0c0e0g0
  bst    tmp2,0    ;                 T=h
  lsr    tmp2         ; tmp2= 00b0d0f0
  bld    tmp2,7    ; tmp2= h0b0d0f0
  lsl    tmp    ; tmp=  0c0e0g00  C=a
  adc    tmp, tmp2    ; tmp=  hcbedgfa
  mov    tmp2,tmp     ; tmp2= hcbedgfa
  andi   tmp2,0b01100110; tmp2= 0cb00gf0
  swap   tmp2         ; tmp2= 0gf00cb0
  andi   tmp, 0b10011001; tmp=  h00ed00a
  add    tmp, tmp2    ; tmp=  hgfedcba

Сами придумали? Если да, то этот же алгоритм должен быть на С той же длинны и времени! Но это уже будет не про С.

Ещё раз повторю. Ни спорю Я про С. Я говорю что компиляторы ещё долго будут полное Г.(IAR) Это основной мой матифф!

ЗЫ. Этот код и на паскале наверное такой-же по времени выйдет.
Сергей Борщ
Цитата(Т.Достоевский @ Sep 4 2007, 00:56) *
этот же алгоритм должен быть на С той же длинны и времени!
...........
Я говорю что компиляторы ещё долго будут полное Г.(IAR)
УпИсаться. И такая же каша у него в голове? 01.gif
singlskv
Цитата(Т.Достоевский @ Sep 4 2007, 01:56) *
Сами придумали? Если да, то этот же алгоритм должен быть на С той же длинны и времени! Но это уже будет не про С.
Сам придумал, а Вы не смогли smile.gif
Ничего он Вам не должен(алгоритм на С)если Вы не можете написать сами так на асемблере,
то какого хрена Вы сравниваете его с С? Большинство алгоритмов я могу
написать на C так что размер/скорость выполнеиния не будут отличаться от ASM более чем на
10-15%
Цитата
Ещё раз повторю. Ни спорю Я про С. Я говорю что компиляторы ещё долго будут полное Г.(IAR) Это основной мой матифф!
Ok, я чуть подумаю какую Вам задачку подогнать,
условие такое, есть набор выходных данных в памяти, есть набор выходных, есть некоторое
преобразование входных в выходные , вы пишите на асм я на С, готовы ?
fmdost
Цитата(singlskv @ Sep 4 2007, 02:14) *
Ok, я чуть подумаю какую Вам задачку подогнать,
условие такое, есть набор выходных данных в памяти, есть набор выходных, есть некоторое
преобразование входных в выходные , вы пишите на асм я на С, готовы ?

Нет.
Неужели вы думаете что у меня нет на руках примеров, и Я голословно что то утверждаю?
Когда мой работники не смогли в IARе впихнуть в мегу 48 то что у меня поместилось в 90с1200, это всё и выплыло. Посмотрите мои посты на сахаре и сдесь про прерывания на С. Сам Я вообше не програмист и образование у меня 5 классов (без иронии). Там были приведены примеры от програмистов. 5-и кратное увеличение кода по сравнению с асм это цветочки.
haker_fox
Цитата(Т.Достоевский @ Sep 4 2007, 07:44) *
Нет.
Неужели вы думаете что у меня нет на руках примеров, и Я голословно что то утверждаю?

Пока получается так.
Цитата(Т.Достоевский @ Sep 4 2007, 07:44) *
Нет.
Неужели вы думаете что у меня нет на руках примеров, и Я голословно что то утверждаю?
Когда мой работники не смогли в IARе впихнуть в мегу 48 то что у меня поместилось в 90с1200, это всё и выплыло.

А переносимость кода? А сроки? Вы не смогли с простой задачей справиться на асме, хотя из ваших постов следует, что Вы им владеете)
Цитата(Т.Достоевский @ Sep 4 2007, 07:44) *
Сам Я вообше не програмист и образование у меня 5 классов (без иронии).

Это отлично видно, что Вы не программист. Только противоречие получается: Вы не программист, но спорите о преимуцествах ассемблера (которым Вы не очень-то и владеете) против Си.
Да и вообще, утверждаете что 5 лет не программировали, и также спорите. Да за 5 лет столько воды утекло и многое изменилось в мире embedded.
zcost
Есть еще аргумент. Недаром архитектура микроконтроллеров как у атмела, так и у микрочипа становится Си ориентированной. Кстати код на С++ у IAR по компактности умещается в те же 10-15% в сравнении с асмом.
Stanislav_S
Цитата(Т.Достоевский @ Sep 4 2007, 03:44) *
Нет.
Неужели вы думаете что у меня нет на руках примеров, и Я голословно что то утверждаю?
Когда мой работники не смогли в IARе впихнуть в мегу 48 то что у меня поместилось в 90с1200, это всё и выплыло. Посмотрите мои посты на сахаре и сдесь про прерывания на С. Сам Я вообше не програмист и образование у меня 5 классов (без иронии). Там были приведены примеры от програмистов. 5-и кратное увеличение кода по сравнению с асм это цветочки.

Я вам серьезно советую избавиться от таких программистов, поскольку судя по всему не умеют пользоваться инструментом. Потому как раздуть код это надо постараться, я вот в некоторых программах даже full printf (ужас!) применяю и даже место остается. А я веть тоже не программист, а схемотехник и при написании программ иногда в учебник по С заглядываю smile.gif. А так, если не можете пользоваться инструментом, то нечего на него обижаться smile.gif
Dog Pawlowa
Цитата(zcost @ Sep 4 2007, 07:07) *
Есть еще аргумент. Недаром архитектура микроконтроллеров как у атмела, так и у микрочипа становится Си ориентированной.

Что, флаг переноса выкинули?! smile.gif
Или что такое Си ориентированная архитектура?
Сергей Борщ
Цитата(Dog Pawlowa @ Sep 4 2007, 13:11) *
Или что такое Си ориентированная архитектура?
1) Наличие нескольких индексных регистров
2) Развитая косвенная адресация.
Kuzmi4
Весело тут у вас.....
По моему после поста singlskv 4.09.2007;00:44 можно тему закрывать...
Dog Pawlowa
Цитата(Сергей Борщ @ Sep 4 2007, 13:26) *
1) Наличие нескольких индексных регистров
2) Развитая косвенная адресация.

А x86 можно считать Си-ориентированной архитектурой?
Два индексных регистра, о развитости косвенной адресации трудно судить, но она ведь есть?
kv_addr
Цитата(singlskv @ Sep 4 2007, 00:44) *
а код типа такой:
Код
;  13 words / 13 cycles
      ; tmp=  abcdefgh
  mov    tmp2,tmp      ; tmp2= abcdefgh
  andi   tmp2,0b01010101; tmp2= 0b0d0f0h
  andi   tmp, 0b10101010; tmp=  a0c0e0g0
  bst    tmp2,0        ;                 T=h
  lsr    tmp2          ; tmp2= 00b0d0f0
  bld    tmp2,7        ; tmp2= h0b0d0f0
  lsl    tmp        ; tmp=  0c0e0g00  C=a
  adc    tmp, tmp2     ; tmp=  hcbedgfa
  mov    tmp2,tmp      ; tmp2= hcbedgfa
  andi   tmp2,0b01100110; tmp2= 0cb00gf0
  swap   tmp2          ; tmp2= 0gf00cb0
  andi   tmp, 0b10011001; tmp=  h00ed00a
  add    tmp, tmp2     ; tmp=  hgfedcba

Трюк, несомненно, красивый. wink.gif Но такой вариант не так уж сильно ему уступает:
Код
; 14 words / 14 cycles
; tmp=abcdefgh
mov tmp2,tmp
ror tmp
rol tmp2
ror tmp
rol tmp2
ror tmp
rol tmp2
ror tmp
rol tmp2
ror tmp
andi tmp,0xf0
andi tmp2,0x0f
or tmp,tmp2
swap tmp
; tmp=hgfedcba

smile.gif
Stariy Alex
Цитата(defunct @ Sep 3 2007, 02:01) *
pdf с bookmark'ами? Залейте, пригодится.
Спасибо

Слил.
http://electronix.ru/forum/index.php?showtopic=36124
Цитата(bbill @ Sep 4 2007, 00:00) *
Залейте, пожалуйста, bbill@mail.ru
Спасибо.

Отправил, 66 мб х 5 файлов (в комплекте AVR-Шпак с дискетой).
На Рапидшару было бы проще.
zltigo
Цитата(Dog Pawlowa @ Sep 4 2007, 14:00) *
А x86 можно считать Си-ориентированной архитектурой?
Два индексных регистра, о развитости косвенной адресации трудно судить, но она ведь есть?

Буквы x бывают разные, если это '386', то 'индексные регисты' абсолютно все. Ну пример адресации:
mov dx, fs:[eax + ecx*4 + 1]
Ну даже если просто 86, то индексных тоже не два - si, di, sp, bp, bx.
Dog Pawlowa
Цитата(zltigo @ Sep 4 2007, 16:24) *
Буквы x бывают разные, если это '386', то 'индексные регисты' абсолютно все. Ну пример адресации:
mov dx, fs:[eax + ecx*4 + 1]
Ну даже если просто 86, то индексных тоже не два - si, di, sp, bp, bx.

Вот недостаток Си - полностью забывается архитектура! smile.gif
Строго говоря, источники расходятся в определении количества индексных регистров, относя bx к регистрам общего назначения и исключая sp ввиду его изменяемости не только программно, но и аппаратно. То есть я забыл всего лишь bp smile.gif
Но я к чему? Не так то много нужно, чтобы быть Си-ориентированной архитектурой? Я думаю, что достаточно хорошего компилятора smile.gif
zltigo
Цитата(Dog Pawlowa @ Sep 4 2007, 16:57) *
То есть я забыл всего лишь bp smile.gif

Забыли прежде всего о 386..586 впрочем это обычное дело sad.gif распространять скромные возможности 86/186/286 на все семейство. Ну а для 86 забыли три регистра, это я Вам, как написавший сотни килобайт кода на ASM, а не прочитавший обзорную статейку, говорю.
Сергей Борщ
Цитата(Dog Pawlowa @ Sep 4 2007, 16:57) *
Но я к чему? Не так то много нужно, чтобы быть Си-ориентированной архитектурой? Я думаю, что достаточно хорошего компилятора smile.gif
Ага. Возьмем PIC16. 8 уровней программно недоступного стека и один FSR. Конечно и для него есть С-компиляторы, но со всякими оговорками. Я, например, не представляю как на такой архитектуре сделать вызов функции по указателю.
singlskv
Цитата(kv_addr @ Sep 4 2007, 15:36) *
Трюк, несомненно, красивый. wink.gif Но такой вариант не так уж сильно ему уступает:
[code]
.....
На самом деле мой вариант это действительно просто трюк,
просто мне нравятся такие трюки и если есть возможность их применить, то
я их применяю, тока тогда, когда это действительно необходимо...

Примерно такие же трюки вполне реализуемы/используемы на С
Эфектифность конечно чуть меньше(на 10-15%), но при этом сохраняется полная переносимость...
правда на другой платформе код может оказаться неэфективным, но рабочим...

Вобщем, если подитожить, учите инструмент которым Вы пользуетесь...
defunct
Цитата(Dog Pawlowa @ Sep 4 2007, 16:57) *
относя bx к регистрам общего назначения и исключая

BX никогда не был индексным регистром. (нет команд 8086-го, которые бы могли делать автоинкремент или декремент этого регистра).
BX в 8086 можно использовать для базовой либо базово-индексной адресации:

mov ax, [bx] <- базовая
mov ax, [bx + si] <- базово-индексная.

BP тоже базовый, только в сочетании с SS.
SP - вещь в себе.

остается и правда только два индексных регистра si, di.
zltigo
Цитата(defunct @ Sep 5 2007, 01:53) *
нет команд 8086-го, которые бы могли делать автоинкремент или декремент этого регистра

Автоинкременация не является признаком индексности или не индексности регистра - не выкручивайтесь smile.gif.
Цитата
BP тоже базовый, только в сочетании с SS.

bp спокойно используeтся без "сочетания" с ss:
mov ds:[bp],ax
defunct
Цитата(zltigo @ Sep 5 2007, 10:18) *
Автоинкременация не является признаком индексности или не индексности регистра - не выкручивайтесь smile.gif.

А чего мне выкручиваться-то? Я просто проходил мимо ;>
адресовать через BX в 8086 можно, но это "базовый" регистр, bp - тоже.
mse
Цитата(kv_addr @ Sep 4 2007, 15:36) *
Трюк, несомненно, красивый. wink.gif Но такой вариант не так уж сильно ему уступает:
...

;О) Дык, тупой rol-ror*8=16, в принципе, уступает 13-тактовому гулькин. Не тот случай, чтобы огород городить. И на-Цуется более кошерно...Что не может не радовать ;О)
fmdost
И все ка-кто дружно пропустили ненужный clr r17. crying.gif
zltigo
Цитата(defunct @ Sep 5 2007, 12:34) *
адресовать через BX в 8086 можно, но это "базовый" регистр, bp - тоже.

bp - Base Pointer по жизни smile.gif. Ну слава богу хоть работать можно smile.gif - defunct после изучения наконец дал "добро".
Ну и еще раз напоминаю, что начиная с 386 и оставшиеся eax, ecx, edx регистры используются и как индексные.
Все завязываем с разговорами о x86 в ветке по AVR 'C'.
kv_addr
Цитата(singlskv @ Sep 5 2007, 01:10) *
На самом деле мой вариант это действительно просто трюк,
просто мне нравятся такие трюки и если есть возможность их применить, то
я их применяю, тока тогда, когда это действительно необходимо...

Как бы возражений нет, этот трюк мне тоже понравился. wink.gif На один такт меньше мною приведенного.
Цитата(singlskv @ Sep 5 2007, 01:10) *
Примерно такие же трюки вполне реализуемы/используемы на С
Эфектифность конечно чуть меньше(на 10-15%), но при этом сохраняется полная переносимость...
правда на другой платформе код может оказаться неэфективным, но рабочим...

Особеность "Цэ" в том, что напрямую одноменным флагом не воспользуешься. Но и флагом "Тэ" (AVR) напрямую пользоваться стремно. Компилятор его пользует для собственных нужд, можно невпопад этот флаг задействовать.
Цитата(singlskv @ Sep 5 2007, 01:10) *
Вобщем, если подитожить, учите инструмент которым Вы пользуетесь...

Я вроде как противоположного не утверждал... rolleyes.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.