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

 
 
> Хочу писать грамотный и красивый код (IAR C AVR), Где можно поучиться?
Daisy
сообщение Jul 27 2005, 11:16
Сообщение #1


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

Группа: Свой
Сообщений: 96
Регистрация: 29-04-05
Из: г. Жуковский
Пользователь №: 4 606



Здравствуйте.
Хотелось бы на примере красивых исходников или неких правил и установок поучиться писать программы (пишу на ИАР для АВР).
Преследуются такие цели как читаемость, понимаемость и относительная легкость внесения добавлений и исправлений в программный код.
Пока пишу с места в карьер. Методом проб и ошибок. В результате получаю "снежный ком" кода, из которого что только не торчит :-)
Скиньте пожалуйста если у кого что-нибудь есть. Или ссылкой поделитесь.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
nml
сообщение Aug 9 2005, 11:04
Сообщение #2


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

Группа: Свой
Сообщений: 86
Регистрация: 13-06-04
Из: Minsk
Пользователь №: 29



А вот вопрос знатокам С для АВРов.

Понадобилась перетасовка битов в int - по сути, транспонировать матрицу 4*4. Чтоб не мудрить - решил просто, в лоб - 16 команд перестановки битиков, объявив этот int в union-е с битовой структурой. Типа такого:
Код
 dst.b0 = src.b0;
 dst.b4 = src.b1;
 dst.b8 = src.b2;
 и т.д.


Учитывая умность компилятора, хотел увидеть что-то типа - src в регистры, потом 16 пар BST/BLD, и результат из регистров в dst. использование 4-х регистров, - не напрягает, по моему. Но. Получил код такой (оптимизация high):
Код
  \   0000012E   2F32               MOV     R19, R18
  \   00000130   7031               ANDI    R19, 0x01
  \   00000132   2F02               MOV     R16, R18
  \   00000134   0F00               LSL     R16
  \   00000136   0F00               LSL     R16
  \   00000138   0F00               LSL     R16
  \   0000013A   2B03               OR      R16, R19
  \   0000013C   7101               ANDI    R16, 0x11
  \   0000013E   2F32               MOV     R19, R18
  \   00000140   9536               LSR     R19
  \   00000142   9536               LSR     R19
  \   00000144   9536               LSR     R19
  \   00000146   7032               ANDI    R19, 0x02
  \   00000148   2B30               OR      R19, R16
  \   0000014A   2F02               MOV     R16, R18
  \   0000014C   7200               ANDI    R16, 0x20
  \   0000014E   2B03               OR      R16, R19
  \   00000150   2F31               MOV     R19, R17
  \   00000152   FB30               BST     R19, 0
  \   00000154   E030               LDI     R19, 0
  \   00000156   F932               BLD     R19, 2
  \   00000158   2B30               OR      R19, R16
  \   0000015A   2F01               MOV     R16, R17
  \   0000015C   9502               SWAP    R16
  \   0000015E   7F00               ANDI    R16, 0xF0
  \   00000160   0F00               LSL     R16
  \   00000162   7400               ANDI    R16, 0x40
  \   00000164   2B03               OR      R16, R19
  \   00000166   2F31               MOV     R19, R17
  \   00000168   9536               LSR     R19
  \   0000016A   7038               ANDI    R19, 0x08
  \   0000016C   2B30               OR      R19, R16
  \   0000016E   2F01               MOV     R16, R17
  \   00000170   0F00               LSL     R16
  \   00000172   0F00               LSL     R16
  \   00000174   7800               ANDI    R16, 0x80
  \   00000176   2B03               OR      R16, R19
  \   00000178   930C               ST      X, R16
  \   0000017A   2F02               MOV     R16, R18
  \   0000017C   FB02               BST     R16, 2
  \   0000017E   E000               LDI     R16, 0
  \   00000180   F900               BLD     R16, 0
  \   00000182   2F32               MOV     R19, R18
  \   00000184   0F33               LSL     R19
  \   00000186   2B30               OR      R19, R16
  \   00000188   7131               ANDI    R19, 0x11
  \   0000018A   2F02               MOV     R16, R18
  \   0000018C   9502               SWAP    R16
  \   0000018E   700F               ANDI    R16, 0x0F
  \   00000190   9506               LSR     R16
  \   00000192   7002               ANDI    R16, 0x02
  \   00000194   2B03               OR      R16, R19
  \   00000196   9526               LSR     R18
  \   00000198   9526               LSR     R18
  \   0000019A   7220               ANDI    R18, 0x20
  \   0000019C   2B20               OR      R18, R16
  \   0000019E   2F01               MOV     R16, R17
  \   000001A0   7004               ANDI    R16, 0x04
  \   000001A2   2B02               OR      R16, R18
  \   000001A4   2F21               MOV     R18, R17
  \   000001A6   0F22               LSL     R18
  \   000001A8   0F22               LSL     R18
  \   000001AA   0F22               LSL     R18
  \   000001AC   7420               ANDI    R18, 0x40
  \   000001AE   2B20               OR      R18, R16
  \   000001B0   2F01               MOV     R16, R17
  \   000001B2   9506               LSR     R16
  \   000001B4   9506               LSR     R16
  \   000001B6   9506               LSR     R16
  \   000001B8   7008               ANDI    R16, 0x08
  \   000001BA   2B02               OR      R16, R18
  \   000001BC   7810               ANDI    R17, 0x80
  \   000001BE   2B10               OR      R17, R16
  \   000001C0   8311               STD     Z+1, R17

... то есть более 70 команд (вместо 32). Жуть какая-то. Где-то я напортачил или все-таки этот ИАР местами глупости выдает?

Кстати, когда это же было в процедуре - там компилятор вообще построил код такой, что использовался только R16 и все через память...

Странно это, однако.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Daisy   Хочу писать грамотный и красивый код (IAR C AVR)   Jul 27 2005, 11:16
- - MALLOY2   Вот читай ! Но все это поверхностно, у каждого...   Jul 27 2005, 11:24
- - MALLOY2   Вот еще коечто нашел правда на англицком   Jul 27 2005, 12:12
|- - Daisy   Цитата(MALLOY2 @ Jul 27 2005, 15:12)Вот еще к...   Jul 27 2005, 12:48
|- - Evgeny_CD   Цитата(MALLOY2 @ Jul 27 2005, 16:12)Вот еще к...   Jul 28 2005, 09:55
- - BVU   Почитайте стандарт языка Си (ANSI) - для знания ас...   Jul 28 2005, 06:20
- - Evgeny_CD   Вот еще нелохая книга по идеологии работы с кодом ...   Jul 28 2005, 10:07
- - alexs   Цитата(Daisy @ Jul 27 2005, 16:16)Здравствуйт...   Jul 30 2005, 09:52
- - Maker6   Купил недавно книгу Керниган-Пайк "Практика ...   Jul 30 2005, 12:01
- - IV_K   советую почитать "Искусство программирования ...   Aug 1 2005, 10:16
|- - ek74   Цитата(IV_K @ Aug 1 2005, 14:16)советую почит...   Aug 8 2005, 12:40
- - ControllerZ   Цитата(Daisy @ Jul 27 2005, 16:16)Здравствуйт...   Aug 7 2005, 07:53
- - IV_K   <pre> // static union { INT1...   Aug 9 2005, 12:09
|- - nml   Цитата(IV_K @ Aug 9 2005, 15:09)а так еще кру...   Aug 9 2005, 13:19
|- - prottoss   Цитата(nml @ Aug 9 2005, 21:19)Цитата(IV_K ...   Aug 17 2005, 17:50
- - IV_K   if (src.b0) dst.b0 = 1; это выражение занимает 2 к...   Aug 10 2005, 07:04
- - bialix   Кроме правил эстетического оформления программ, им...   Aug 10 2005, 10:29
- - impatt   Если разговор про оформление, то практически из лю...   Aug 16 2005, 05:57


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

 


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


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