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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Хочу писать грамотный и красивый код (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
MALLOY2
сообщение Jul 27 2005, 11:24
Сообщение #2


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



Вот читай ! Но все это поверхностно, у каждого компилятора та даже от версии к версии может все менятся, ачто касается красоты так она обычно не совместима с производительностью, и все этьо приходит с опытом чем больше пишеш тем красивие программы smile.gif
Прикрепленные файлы
Прикрепленный файл  Rulezz_.zip ( 219.53 килобайт ) Кол-во скачиваний: 381
 
Go to the top of the page
 
+Quote Post
MALLOY2
сообщение Jul 27 2005, 12:12
Сообщение #3


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



Вот еще коечто нашел правда на англицком
Прикрепленные файлы
Прикрепленный файл  Recommended_C_Style_and_Coding_Standards.zip ( 110.29 килобайт ) Кол-во скачиваний: 245
 
Go to the top of the page
 
+Quote Post
Daisy
сообщение Jul 27 2005, 12:48
Сообщение #4


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

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



Цитата(MALLOY2 @ Jul 27 2005, 15:12)
Вот еще коечто нашел правда на англицком
*

Спасибо. Буду кодосовершенствоваться. Английкий - не страшно.
Go to the top of the page
 
+Quote Post
BVU
сообщение Jul 28 2005, 06:20
Сообщение #5


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

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Почитайте стандарт языка Си (ANSI) - для знания аспектов языка Си, хотя я начинал его изучение с книги Керниган/Ритчи, которая в 80-х годах считалась "настольной книгой" для программиста на Си.
Если же Вам необходима красота исходного кода(удобство в читаемости программ), то такие стандарты написания кода(на Си) имеются практически у каждой фирмы производителя software, особенно если она имеет категорию качества по стандарту CMM или другому. Далее если же Вам надо овладеть искусством алгоритмов, то далеко ходить не надо, Кнутт изложил это в своем трех-томнике.


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
Evgeny_CD
сообщение Jul 28 2005, 09:55
Сообщение #6


Гуру
******

Группа: СуперМодераторы
Сообщений: 2 065
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 892



Цитата(MALLOY2 @ Jul 27 2005, 16:12)
Вот еще коечто нашел правда на англицком
*

http://www.chris-lott.org/resources/cstyle...hill-cstyle.pdf
вроде как свежая верия того же, но отличия мелкие.
Go to the top of the page
 
+Quote Post
Evgeny_CD
сообщение Jul 28 2005, 10:07
Сообщение #7


Гуру
******

Группа: СуперМодераторы
Сообщений: 2 065
Регистрация: 11-01-05
Из: Москва
Пользователь №: 1 892



Вот еще нелохая книга по идеологии работы с кодом для больших проектов.

webfile.ru/428226

Как скачаете - дайте знать на esp1@kbkcc.ru, чтобы я мог выложить ссылку в public domain.
Go to the top of the page
 
+Quote Post
alexs
сообщение Jul 30 2005, 09:52
Сообщение #8


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

Группа: Свой
Сообщений: 97
Регистрация: 7-06-05
Пользователь №: 5 811



Цитата(Daisy @ Jul 27 2005, 16:16)
Здравствуйте.
Хотелось бы на примере красивых исходников или неких правил и установок поучиться писать программы (пишу на ИАР для АВР).
Преследуются такие цели как читаемость, понимаемость и относительная легкость внесения добавлений и исправлений в программный код.
Пока пишу с места в карьер. Методом проб и ошибок. В результате получаю "снежный ком" кода, из которого что только не торчит :-)
Скиньте пожалуйста если у кого что-нибудь есть. Или ссылкой поделитесь.
*

На сайте Atmel :Application Note: AVR035: Efficient C Coding for AVR.
Там как раз на IARе.
Go to the top of the page
 
+Quote Post
Maker6
сообщение Jul 30 2005, 12:01
Сообщение #9





Группа: Новичок
Сообщений: 2
Регистрация: 21-07-05
Пользователь №: 6 996



Купил недавно книгу
Керниган-Пайк "Практика программирования"
Изд.дом Вильямс 2004 год 288 с

Книга достаточно интересная, хотя некоторые моменты ныне считаются спорными (это перевод восьмого издания этой книги).

На основе простых примеров определяются правила проектирования, кодирования и отладки на С
Go to the top of the page
 
+Quote Post
IV_K
сообщение Aug 1 2005, 10:16
Сообщение #10


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

Группа: Свой
Сообщений: 121
Регистрация: 17-06-05
Пользователь №: 6 087



советую почитать "Искусство программирования на С" Ричард Хэзфилд, Лоуренс Кирби. Там это подробно обсасывается
Go to the top of the page
 
+Quote Post
ControllerZ
сообщение Aug 7 2005, 07:53
Сообщение #11


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

Группа: Свой
Сообщений: 197
Регистрация: 6-08-05
Пользователь №: 7 409



Цитата(Daisy @ Jul 27 2005, 16:16)
Здравствуйте.
Хотелось бы на примере красивых исходников или неких правил и установок поучиться писать программы (пишу на ИАР для АВР).
Преследуются такие цели как читаемость, понимаемость и относительная легкость внесения добавлений и исправлений в программный код.
Пока пишу с места в карьер. Методом проб и ошибок. В результате получаю "снежный ком" кода, из которого что только не торчит :-)
Скиньте пожалуйста если у кого что-нибудь есть. Или ссылкой поделитесь.
*

Также не маловажно знать и уметь пользоваться архитектурой процессора, это очень важная деталь в программировании.
Go to the top of the page
 
+Quote Post
ek74
сообщение Aug 8 2005, 12:40
Сообщение #12


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

Группа: Свой
Сообщений: 81
Регистрация: 4-08-05
Из: г. Саратов
Пользователь №: 7 351



Цитата(IV_K @ Aug 1 2005, 14:16)
советую почитать "Искусство программирования на С" Ричард Хэзфилд, Лоуренс Кирби. Там это подробно обсасывается
*

Кстати, если нужно, то могу дать исходники всех примеров их этой книги (500 кб в архиве)

Кроме этого есть следующие книги (правда большинство из них - это C++, но тоже пожно почитать):

1. Programming languages, their environments and system software interfaces - Extensions for the programming language C to support embedded processors
2. C Style Guide for embedded systems
3. Embedded C - Traps and Pitfalls
4. Programming Embedded Systems in C and C++ by Michael Barr

5. ANSI/ISO C++ Professional Programmer's Handbook
6. Algorithms and Data Structures in C++ by Alan Parker
7. Patterns, Models, and Application Development: A C++ Programmer's Reference by Julio Sanchez; Maria P. Canton
8. C++ Programming Unleashed
9. C++ Gotchas: Avoiding Common Problems in Coding and Design By Stephen C. Dewhurst
10. C++ FAQs, Second Edition By Marshall Cline, Greg Lomow, Mike Girou
11. Efficient C++ Performance Programming Techniques By Dov Bulka, David Mayhew
Go to the top of the page
 
+Quote Post
nml
сообщение Aug 9 2005, 11:04
Сообщение #13


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

Группа: Свой
Сообщений: 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
IV_K
сообщение Aug 9 2005, 12:09
Сообщение #14


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

Группа: Свой
Сообщений: 121
Регистрация: 17-06-05
Пользователь №: 6 087



<pre>
//
static union {
INT16U w;
struct {
INT16U b0:1; INT16U b4:1; INT16U b8:1; INT16U b12:1;
INT16U b1:1; INT16U b5:1; INT16U b9:1; INT16U b13:1;
INT16U b2:1; INT16U b6:1; INT16U b10:1; INT16U b14:1;
INT16U b3:1; INT16U b7:1; INT16U b11:1; INT16U b15:1;
};
}src,dst;

src.w = A;
dst.w = 0;

if (src.b0) dst.b0 = 1;
if (src.b4) dst.b1 = 1;
if (src.b8) dst.b2 = 1;
if (src.b12) dst.b3 = 1;

if (src.b1) dst.b4 = 1;
if (src.b5) dst.b5 = 1;
if (src.b9) dst.b6 = 1;
if (src.b13) dst.b7 = 1;

if (src.b2) dst.b8 = 1;
if (src.b6) dst.b9 = 1;
if (src.b10) dst.b10 = 1;
if (src.b14) dst.b11 = 1;

if (src.b3) dst.b12 = 1;
if (src.b7) dst.b13 = 1;
if (src.b11) dst.b14 = 1;
if (src.b15) dst.b15 = 1;


// dst.b0 = src.b0;
// dst.b4 = src.b1;
// dst.b8 = src.b2;
// dst.b12 = src.b3;

// dst.b1 = src.b4;
// dst.b5 = src.b5;
// dst.b9 = src.b6;
// dst.b13 = src.b7;

// dst.b2 = src.b8;
// dst.b6 = src.b9;
// dst.b10 = src.b10;
// dst.b14 = src.b11;

// dst.b3 = src.b12;
// dst.b7 = src.b13;
// dst.b11 = src.b14;
// dst.b15 = src.b15;

A = dst.w;

</pre>


а так еще круче!! =))))
register union спасет отца русской демократии
Go to the top of the page
 
+Quote Post
nml
сообщение Aug 9 2005, 13:19
Сообщение #15


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

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



Цитата(IV_K @ Aug 9 2005, 15:09)
а так еще круче!! =))))
register union спасет отца русской демократии
*


Не, не круче. Команд конечно меньше, но работает с памятью, а это еще по 4 такта на действие... Не то. Объявлять же в регистрах - и занять ради этого 4 регистра - как-то тоже не хочется.

Таки лучше всего спасает ассемблерная процедура. Хотя, согласен - не лучший выход.

Или я просто от компилятора слишком многого хочу?
Go to the top of the page
 
+Quote Post

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

 


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


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