|
Хочу писать грамотный и красивый код (IAR C AVR), Где можно поучиться? |
|
|
|
Jul 27 2005, 12:48
|
Частый гость
 
Группа: Свой
Сообщений: 96
Регистрация: 29-04-05
Из: г. Жуковский
Пользователь №: 4 606

|
Цитата(MALLOY2 @ Jul 27 2005, 15:12) Вот еще коечто нашел правда на англицком Спасибо. Буду кодосовершенствоваться. Английкий - не страшно.
|
|
|
|
|
Jul 28 2005, 06:20
|

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

|
Почитайте стандарт языка Си (ANSI) - для знания аспектов языка Си, хотя я начинал его изучение с книги Керниган/Ритчи, которая в 80-х годах считалась "настольной книгой" для программиста на Си. Если же Вам необходима красота исходного кода(удобство в читаемости программ), то такие стандарты написания кода(на Си) имеются практически у каждой фирмы производителя software, особенно если она имеет категорию качества по стандарту CMM или другому. Далее если же Вам надо овладеть искусством алгоритмов, то далеко ходить не надо, Кнутт изложил это в своем трех-томнике.
--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
|
|
|
|
|
Jul 30 2005, 09:52
|
Частый гость
 
Группа: Свой
Сообщений: 97
Регистрация: 7-06-05
Пользователь №: 5 811

|
Цитата(Daisy @ Jul 27 2005, 16:16) Здравствуйте. Хотелось бы на примере красивых исходников или неких правил и установок поучиться писать программы (пишу на ИАР для АВР). Преследуются такие цели как читаемость, понимаемость и относительная легкость внесения добавлений и исправлений в программный код. Пока пишу с места в карьер. Методом проб и ошибок. В результате получаю "снежный ком" кода, из которого что только не торчит :-) Скиньте пожалуйста если у кого что-нибудь есть. Или ссылкой поделитесь. На сайте Atmel :Application Note: AVR035: Efficient C Coding for AVR. Там как раз на IARе.
|
|
|
|
|
Jul 30 2005, 12:01
|
Группа: Новичок
Сообщений: 2
Регистрация: 21-07-05
Пользователь №: 6 996

|
Купил недавно книгу Керниган-Пайк "Практика программирования" Изд.дом Вильямс 2004 год 288 с
Книга достаточно интересная, хотя некоторые моменты ныне считаются спорными (это перевод восьмого издания этой книги).
На основе простых примеров определяются правила проектирования, кодирования и отладки на С
|
|
|
|
|
Aug 7 2005, 07:53
|

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

|
Цитата(Daisy @ Jul 27 2005, 16:16) Здравствуйте. Хотелось бы на примере красивых исходников или неких правил и установок поучиться писать программы (пишу на ИАР для АВР). Преследуются такие цели как читаемость, понимаемость и относительная легкость внесения добавлений и исправлений в программный код. Пока пишу с места в карьер. Методом проб и ошибок. В результате получаю "снежный ком" кода, из которого что только не торчит :-) Скиньте пожалуйста если у кого что-нибудь есть. Или ссылкой поделитесь. Также не маловажно знать и уметь пользоваться архитектурой процессора, это очень важная деталь в программировании.
|
|
|
|
|
Aug 8 2005, 12:40
|
Частый гость
 
Группа: Свой
Сообщений: 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
|
|
|
|
|
Aug 9 2005, 11:04
|

Частый гость
 
Группа: Свой
Сообщений: 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 и все через память... Странно это, однако.
|
|
|
|
|
Aug 9 2005, 13:19
|

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

|
Цитата(IV_K @ Aug 9 2005, 15:09) а так еще круче!! =)))) register union спасет отца русской демократии Не, не круче. Команд конечно меньше, но работает с памятью, а это еще по 4 такта на действие... Не то. Объявлять же в регистрах - и занять ради этого 4 регистра - как-то тоже не хочется. Таки лучше всего спасает ассемблерная процедура. Хотя, согласен - не лучший выход. Или я просто от компилятора слишком многого хочу?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|