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

|
В общем, наигрался я с "С". Память заканчивается, а проект лежит. Теперь переписываю на асме. Размер кода обещает быть в 2 раза короче (к слову о больших проектах). Да и пишется все по-быстрому, если знаешь, что делаешь. После чего все эти компиляторы, расплодившиеся в последнее время у меня в компе, летят в корзину. То же самое, кстати, касается и pic18 и dspic30/33 и HCS08, коими я иногда страдаю. Компилятор-то, оказывается, в голове...
|
|
|
|
|
Feb 22 2008, 23:55
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(_Pasha @ Feb 23 2008, 02:10)  В общем, наигрался я с "С". Память заканчивается, а проект лежит. Теперь переписываю на асме. Размер кода обещает быть в 2 раза короче (к слову о больших проектах). Такая разница может получиться ТОЛЬКО на вычислительных алгоритмах и в основном в местах где при использовании С необходимо делать преобразование типов, ну или для вариантов когда просто в С нет соответствующего размера типа, например в С нет 3-байтовых переменных... Для остальных вариантов..., ну показывайте код что ли, думаю что после некоторой оптимизации он Вас опять же сможет удивить... Цитата(defunct @ Feb 23 2008, 02:37)  Совет для того чтобы память не заканчивалась в проектах на "C" 1. Делать стек большим, а глобальных переменных поменьше. 2. Использовать heap. Вот здесь хотелось бы разъяснений и поподробнее...(без подколок...), я не понимаю как уменьшить количество глобальных переменных. Я не понимаю как можно использовать heap для уменьшения расхода памяти вместо использования глобальных переменных...
|
|
|
|
|
Feb 23 2008, 00:10
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(singlskv @ Feb 23 2008, 01:55)  Вот здесь хотелось бы разъяснений и поподробнее...(без подколок...), я не понимаю как уменьшить количество глобальных переменных. А что Вы храните в глобальных переменных? Ведь кроме конфигурации там больше нечего хранить. Под все остальное память можно выделить либо в стеке, либо в куче. Цитата Я не понимаю как можно использовать heap для уменьшения расхода памяти вместо использования глобальных переменных... это смотря под что у вас используются глобальные переменные. Допустим имеем дело с неким протоколом где команды(пакеты) могут поступать не дожидаясь ответа на предыдущую команду(пакет). Предположим что глобально выделенно два буфера фиксированного размера (один обрабатывается, во второй принимается сл. команда). Попробуем сократить объем памяти. Выделяем буфер из heap, ведем в него прием. По окончании приема, передаем указатель на этот буфер в функцию обработки, выделяем еще один буфер под прием сл. пакета и ведем прием дальше. В функции обработки - перевыделяем память в соответсвии с реальным размером пакета (не всегда же пакет будет максимально возможной длины), или копируем во временный буфер в стеке, память освобождаем. Итого на лицо экономия памяти на 1 буфер в 99% времени работы нашего устройства (т.к. полных два буфера будет использоваться в очень короткий промежуток времени - только в момент между окончанием приема текущего пакета и запуском функции обработки). Еще пример: допустим по i2c раз в секунду надо что-то записать/прочитать. Выделили буфер из heap - сказали i2c драйверу - читать/писать данные в него. Все остальное время - эта память будет использоваться под что-то другое. и так многие места где используются значительные объемы памяти можно разделять во времени с помощью heap'a - пользовать память эффективно (одну и ту же область для разных целей в разное время).
|
|
|
|
|
Feb 23 2008, 00:43
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(defunct @ Feb 23 2008, 03:10)  А что Вы храните в глобальных переменных? Ведь кроме конфигурации там больше нечего хранить. Как это нечего ? Вот вполне реальный пример, нужно по 4 каналам АЦП делать скользящее среднее по 8 измерениям, ИТОГО: 4 * 8 * 2(байта на измерение) = 64 байта + 4(канала) * 2(байта) = 8 байт для хранения суммы + 1 байт на хранение номера канала + пару байт на всякие сервисные штучки ИТОГО: ~75 байт глобальных переменных.. Пример N2: Есть ~250байт которые есть суть текущее состояние системы, эти параметры могут быть запрошены в любой момент например по протоколу модбас, допустим что модбас работает на скорости 345600, можем ли мы хранить где-нить кроме глобальных переменных эти данные ?
|
|
|
|
|
Feb 23 2008, 01:10
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(singlskv @ Feb 23 2008, 02:43)  Как это нечего ? Вот вполне реальный пример, нужно по 4 каналам АЦП делать скользящее среднее по 8 измерениям, ИТОГО: 4 * 8 * 2(байта на измерение) = 64 байта Я конечно не знаю вашей задачи полностью и возможно у вас есть некие строгие требования к сохранению фазы сигнала поэтому нужен КИХ, а я не брезгую БИХ'ом - ибо эффективней с т.з. памяти.. У меня скользящее по восьми измерениям занимает 2* U16 данных и кот наплакал кода. итого 4 канала - 16 байт: код для усреднения по 8-ми точкам: Код pChan->vAverage = (pChan->vSum + 4) >> 3; pChan->vSum += val - pChan->vAverage; но я не меняя размер данных могу и по 16-ти точкам усреднять и по 32-м и по 1024. меняться будет только формула.. Конечно, это не тот случай когда heap чем-то помог, но все же думать об экономии там где это возможно - стоит. Цитата Пример N2: Есть ~250байт которые есть суть текущее состояние системы, эти параметры могут быть запрошены в любой момент например по протоколу модбас, допустим что модбас работает на скорости 345600, можем ли мы хранить где-нить кроме глобальных переменных эти данные ? Статистика / параметры системы - это есть конфигурация... Стало быть легально делать их глобальными.
|
|
|
|
|
Feb 24 2008, 18:47
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(defunct @ Feb 23 2008, 04:10)  Я конечно не знаю вашей задачи полностью и возможно у вас есть некие строгие требования к сохранению фазы сигнала поэтому нужен КИХ, а я не брезгую БИХ'ом - ибо эффективней с т.з. памяти.. У меня скользящее по восьми измерениям занимает 2* U16 данных и кот наплакал кода. итого 4 канала - 16 байт: код для усреднения по 8-ми точкам: Я тоже пользуюсь разными вариантами... иногда честное скользящее среднее иногда экспоненциальный фильтр. Цитата Код pChan->vAverage = (pChan->vSum + 4) >> 3; pChan->vSum += val - pChan->vAverage; и так тоже пользуюсь, тока для уменьшения рассчетов, я в таких случаях считаю что, все вычисляется с коэфициентом (8 ну или сколько мы там решили), тогда никагого оверхеда не происходит в принципе... Цитата Конечно, это не тот случай когда heap чем-то помог, но все же думать об экономии там где это возможно - стоит. Ну вот я и хочу увидеть эту экономию, и особенно в сравнении с асм, не, я конечно понимаю что для моих задач никакой экономии просто не будет, Скажем так, хочу увидеть задачи (все таки контроллерные... хоть чуть...) где использование heap будет нужным/оправданным..
|
|
|
|
|
Feb 24 2008, 21:03
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(singlskv @ Feb 24 2008, 20:47)  Скажем так, хочу увидеть задачи (все таки контроллерные... хоть чуть...) где использование heap будет нужным/оправданным.. Ну так я ж выше привел такие примеры. Везде где есть пакетная обработка - использование heap'a (точнее сказать использование динамической памяти) экономит расход. Цитата Здесь, на мой взгляд HEAP очень органично вписывается. Я делаю дефрагментацию (удаление дырки от выполненной команды), храню буфер активных команд (переменной длины) Один из способов борьбы с фрагментацией - секторный подход - форматируем некую область памяти на мотив секторов на диске фиксированного размера, потом выделяем и освобождаем их. плюсы - быстро, нет проблем с фрагментацией, простой менеджер памяти. минусы - overhead на маленьких объемах, и ограничение по объему.
|
|
|
|
Сообщений в этой теме
SasaVitebsk Сопоставление проектов С и АСМ Feb 17 2008, 20:18 _Pasha Для меня лично есть одно НО:
вот я использую мульт... Feb 18 2008, 07:58 Dog Pawlowa Цитата(_Pasha @ Feb 18 2008, 11:58) Для м... Feb 19 2008, 06:54  _Pasha Цитата(Dog Pawlowa @ Feb 19 2008, 09:54) ... Feb 19 2008, 07:59   Dog Pawlowa Цитата(_Pasha @ Feb 19 2008, 11:59) Продо... Feb 19 2008, 10:42    _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 defunct Цитата(_Pasha @ Feb 23 2008, 01:10) В общ... Feb 22 2008, 23:37  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      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 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
|
|
|