|
Сопоставление проектов С и АСМ, Немного цифр |
|
|
|
 |
Ответов
|
Feb 18 2008, 07:58
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Для меня лично есть одно НО: вот я использую мультипоточное программирование на асме, стек-фреймы и прочее - так проще и читабельнее выглядят программы. Диспетчеризация кооперативная. При переходе от потока к потоку в свопинге участвуют только содержимое PC и SP. Все крутится на минимальном наборе регистров, потому что большая их часть задействована в прерываниях, в которых тоже свопинга мало. И под такую Homebrew - ось я заточить "С" не смогу никак. Вот вчера запустил ногодрыгалку на меге 640 по теме, которой я к Вам в личку напрашивался. Из 15 возможных ШИМ используются все с частотой до 10кГц. Из 16 АЦП используются все. + Дисплей 7 сегментный + клава + 2 модбаса + 1 RS232. И рад бы я это на "С" написать, потому как времени на это немного, но прикинул, что с учетом неперенесенных наработок и определенной критической массы Time-critical sections, да еще и трудностей с мультипотоком, писанины будет раза в 3 больше.
А тут же параллельно силовая поделка на: пульт на меге 8 (+модбас) контроллер: мега48+PIC18f2431 общаются по I2C (+модбас) Здесь без "С" вообще никуда.
А по качеству кода у меня и к Winavr претензий нет. И что самое приятное - чем тупее/тривиальнее/читабельнее код, тем лучше оптимизация.
|
|
|
|
|
Feb 19 2008, 06:54
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(_Pasha @ Feb 18 2008, 11:58)  Для меня лично есть одно НО: вот я использую мультипоточное программирование на асме, стек-фреймы и прочее - так проще и читабельнее выглядят программы. ... А что такое стек-фреймы? Меня первый же безусловный переход вводит в ступор, а второй - в ярость. Это я так, нисколько не собираясь споров затевать.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Feb 19 2008, 07:59
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(Dog Pawlowa @ Feb 19 2008, 09:54)  А что такое стек-фреймы? Меня первый же безусловный переход вводит в ступор, а второй - в ярость. Это я так, нисколько не собираясь споров затевать. Ну, я сразу все не напишу. Модель вкратце, остальное по уточняющим вопросам. Код .dseg Entry_Point: .byte 2 Save_SP: .byte 2 Local_SP: .byte 2 Local_Stack: .byte my_Stack_Size
Var1: .byte 1 ;.............................. VarN: .byte 2
.set Local_Var_Org = Var1 Это по данным. Предположим, у нас уже Y адресует начало этого блока данных Тогда пролог процедуры: Код ld zL,Y+ ld zh,Y+; load entry point in r0,spl in r1,sph st Y+,r0; store stack pointer st Y+,r1
ld r0,Y+ ld r1,Y+ cli out spL,r0 out sph,r1 sei ; at this line Y points to LOCAL DATA ijmp; resume procedure execution Эпилог соответственно восстанавливает все обратно Очень полезный макрос Код .macro leave; <new_entry_point_addr> ldi zL,low(@0) ldi zh,high(@0) jmp Epilogue .endm Итого в нашу пользу: 1. Имеем реентерабельные процедуры. Могу выложить пример, где 4 одинаковых процесса крутятся таким образом, выдают инфу каждый на свой индикатор (7-сегм), обрабатывают энкодер как орган управления (правда, плохонько, но претензий нет, я и не работаю над собой) 2. Читабельность зашкаливает Вместо приснопамятных переменных State мы переопределяем точку входа в процедуру. Что-нить проверили, кое-какое условие, затем просто пишем leave addr вместо rjmp Код Label1: call Test_Some_Conditions; breq Label2; leave Label1; exits here, but next entry point will be Label1 Label2:; continue program execution 3. Если глубина локального стека позволяет, можно вызывать другие подпрограммы, и если в них использовать leave, все еще интереснее. Т.е. с точки зрения программиста нормальная логика выполнения программ не нарушается. 4. Локальные данные адресуются с помощью yL:yH, намертво закрепленных за указателем Продолжать ?
|
|
|
|
|
Feb 19 2008, 10:42
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(_Pasha @ Feb 19 2008, 11:59)  Продолжать ? Нет, спасибо. Интересно, конечно, но я уже перешел на 'C' и возвращаться не имеет смысла. Однажды видел проект (система продажи билетов на ЖД эпохи начала перестройки), в котором использование макросов и условной компиляции поражало воображение, но для этого нужна свежая молодая голова. Too late
--------------------
Уходя, оставьте свет...
|
|
|
|
Сообщений в этой теме
SasaVitebsk Сопоставление проектов С и АСМ Feb 17 2008, 20:18    _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 Цитата(defunct @ Feb 20 2008, 17:51) Стил... Feb 20 2008, 18:49 SasaVitebsk Цитата(_Pasha @ Feb 20 2008, 22:49) Пробл... Feb 20 2008, 21:06 _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
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|