Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Вопросы начинающих

Вопросы начинающих Прежде чем задать вопрос, стоит воспользоваться поиском

Ответ
 
Опции темы Опции просмотра
Старый 04.02.2015, 22:39   #1
hfmscan
Senior Member
 
Аватар для hfmscan
 
Регистрация: 17.01.2013
Адрес: Москва
Возраст: 43
Сообщений: 415
Вес репутации: 243/28
hfmscan has a spectacular aura abouthfmscan has a spectacular aura abouthfmscan has a spectacular aura about
Отправить сообщение для hfmscan с помощью ICQ
По умолчанию C18, как уменьшить размер кода

Цитата:
Сообщение от tsb58 Посмотреть сообщение
Изначально вся суета по поводу замены ПИКа у ТС затевалась из-за нехватки памяти программ для его каких-то целей.
Все правильно, так и есть, иногда посещают мысли дополнить функционал, но памяти программ нету практически.
компилятор C18, все оптимизации включены.
на асме я не писатель... можно было бы какие-то куски кода переписать на асм, но я не представляю как определить какая функция сколько занимает... пробовал только тупым методом, когда комментаришь тело функции и компилить и сравнивать, но это забодаешься...
не знаю, может есть еще какие-то способы уменьшить размер кода, кроме asm?
__________________
STM32F042
PIC18F25k80

Последний раз редактировалось hfmscan; 04.02.2015 в 22:47.
hfmscan вне форума   Ответить с цитированием
Старый 04.02.2015, 23:10   #2
IceS
Super Moderator
 
Регистрация: 01.03.2007
Адрес: St. Petersburg
Возраст: 39
Сообщений: 3,251
Вес репутации: 3684/111
IceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond repute
Отправить сообщение для IceS с помощью ICQ
По умолчанию Re: PIC18F25k80 vs PIC18F26k80.

Цитата:
Сообщение от hfmscan Посмотреть сообщение
Все правильно, так и есть, иногда посещают мысли дополнить функционал, но памяти программ нету практически.
компилятор C18, все оптимизации включены.
на асме я не писатель... можно было бы какие-то куски кода переписать на асм, но я не представляю как определить какая функция сколько занимает... пробовал только тупым методом, когда комментаришь тело функции и компилить и сравнивать, но это забодаешься...
не знаю, может есть еще какие-то способы уменьшить размер кода, кроме asm?
Обычно в настройках компилятор и линкера есть галочки какие дополнительние файлы генерить. Поиграйтесь с ними. В map файле должна быть вся нужная вам информация, о размере функций, о занимаемой памяти, о стеке и т.п.
__________________
- Готово, мастер !!!
- Что готово ???
- Сломал ...
IceS вне форума   Ответить с цитированием
Старый 04.02.2015, 23:36   #3
hfmscan
Senior Member
 
Аватар для hfmscan
 
Регистрация: 17.01.2013
Адрес: Москва
Возраст: 43
Сообщений: 415
Вес репутации: 243/28
hfmscan has a spectacular aura abouthfmscan has a spectacular aura abouthfmscan has a spectacular aura about
Отправить сообщение для hfmscan с помощью ICQ
По умолчанию Re: PIC18F25k80 vs PIC18F26k80.

Вот map файл моего проекта, там можно что-то увидеть?
Вложения
Тип файла: rar elm_hfm2.X.production.rar (17.3 Кб, 2 просмотров)
__________________
STM32F042
PIC18F25k80
hfmscan вне форума   Ответить с цитированием
Старый 04.02.2015, 23:49   #4
hfmscan
Senior Member
 
Аватар для hfmscan
 
Регистрация: 17.01.2013
Адрес: Москва
Возраст: 43
Сообщений: 415
Вес репутации: 243/28
hfmscan has a spectacular aura abouthfmscan has a spectacular aura abouthfmscan has a spectacular aura about
Отправить сообщение для hfmscan с помощью ICQ
По умолчанию Re: PIC18F25k80 vs PIC18F26k80.

вот например функция (приведена частично) которая пересчитывает значение переменной по определенному закону, вся функция занимает 4 кило памяти программ. что в ней можно оптимизировать?

Цитата:
void TranslateValue(static word *res, static word value, static uchar calc, static uchar *len) {
static int vi;

*res = value;
*len = 1; // большинство параметров 1 байт возврат!
if (calc==0x01) { *res=value; *len = 2; } // пересчет не нужен, 2 байт
if (calc==0x02) *res=value; // пересчет не нужен, значение 1 байт
if (calc==0x03) { *res=value; *len = 2; } // пересчет не нужен, 2 байт

// АЦП 10 бит в 8 бит
if (calc==0x05) { value = (value >> 2); if (value > 0xFF) value = 0xFF; *res=value; }

if (calc==0x06) { value = (value << 7); *res=value; *len = 2; } // for PMS Siemens 64 RPM

// RPM ранние VDO
if (calc==0x08) { *res=value*120; *len = 2; }
// Обороты VDO!
if (calc==0x09) {
if (value > 0x7FFF) value = 0; // Отрицательные значения в 0
if (value > 9999) value = 9999; // Ограничение
*res=value*4;
*len = 2;
}
//
if (calc==0x0A) { value=(value*1.275+0.5); if (value > 0xFF) value=0xFF; *res=value; }
if (calc==0x0C) { *res=value*100; *len = 2; }
//14: // * 1.2 Скорость авто. 0.6 прибавляю сознательно, убо все равно всегда занижает пробег и скорсоть...
if (calc==0x0E) { value= value * 1.2+0.6; if (value > 0xFF) value=0xFF; *res=value; }


// X/2
if (calc==0x10) *res= (value >> 1);

// X/4
if (calc==0x11) { *res= ((value+2) >> 2); *len = 2; };

if (calc==0x12) { *res= value * 61.5; *len = 2; }

// X/3 Inj Time for Bosch
// Корректирую время впрыска
if (calc == 0x13) {
value = ((value+2)/3);
*len = 2;
if (value > iInjTimeDeltaBosch) value -= iInjTimeDeltaBosch;
*res = value;
};

//19: // лямбда + регулирование по ней
if (calc==0x14) { *res= (value << 8) + 0x80; *len = 2; }


// Inj Time Siemens
// X/4
if (calc == 0x15) {
value >>= 1;
value++;
value >>= 1;
if (value > iInjTimeDeltaSiemens) value -= iInjTimeDeltaSiemens;
*res = value;
*len = 2;
}

// *16*4
if (calc==0x16) { value = (value << 6); *res=value; *len = 2; } // for PMS Siemens RPM



// Inj Time Bosch ранний
// X/4
if (calc == 0x17) {
value >>= 1;
value++;
value >>= 1;
if (value > iInjTimeDeltaBosch) value -= iInjTimeDeltaBosch;
*res = value;
*len = 2;
}

//24: // У Бош 55 до -34, у OBD2 -64 до 63.5
if (calc==0x18) {
*res = (4046-value*12+8.5)/17;
}

// исходно -25..+25 превратить в -100..+100
if (calc==0x1A) {
// *res = 96 + (value >> 2);
if (value >= 128)
*res = 128 + ((value-126) >> 2);
else
*res = 128 - ((130-value) >> 2);
}

//23: // У Бош -50% до +50%, у OBD2 -100% до 99.22%
if (calc==0x1C) {
*res = 64 + (value >> 1);
// до 18.06.13 было так, но это думаю неверено.
/* if (value < 128)
*res = 64+(value >> 1);
else
*res = 192-(value >> 1);*/
}

//15: // * 2.5/3.6 MAF
if (calc==0x1E) { *res= value * 69.45; *len = 2; }

// MAP (0;-200)-(255;1075)
if (calc==0x20) {
value = value*5;
if (value < 200) *res = 0;
else *res = ((value-200)+5)/10; //
}

// PMS idle speed inj time 500 = 1ms
// 2ms(1000) это 100% времени впрыска, а значит 127
if (calc==0x21) {
*res = 128;
if (value < 1000) *res = 128 + ((value+5)/8);
if (value > 0xFC18) *res = 128 - ((0xFFFF-value+5)/8);
}

// PMS Lower part load
// CALC=(0;1.0)-(127;1.25)-(128;0.75)-(255;1)~2
if (calc==0x22) {
if (value < 128)
*res = 128+((value+2) >> 2);
else
*res = 128-((0xFF-value+2) >> 2);
}

// O2 *40
if (calc==0x24) {
*len = 2;
value = ((value<<2)+3)/5;
*res = 0x80 + (value<<8);
}

// O2 Sens control VDO ранние, где 57 это 0
// шаг у них такой же 1%=1.28
if (calc==0x26) {
*res = value + 71;
if (*res > 0xFF) *res = 0xFF;
}

// Ignition coil burn voltage T1
// У сименса 0xFF=73V у бош 0xFF=102V
if (calc==0x28) { *res = (value*0.715+0.5); }


// напряжение в бош
// 255=15.7 15.7*x/255*1000
if (calc==0x32) {
*res = value*61.57;
// *res = value;
*len = 2;
}



if (calc==0x3A) {
// В OBD2 макс 215* а в HFM 300, поэтому надо ограничить
if (value > 224) { *res=152+((value-224)*(300-(112))/(255-224)); if (*res > 0xFF) *res = 0xFF; return; }
if (value > 208) { *res=133+((value-208)*(112-(93))/(224-208)); if (*res > 0xFF) *res = 0xFF; return; }
if (value > 192) { *res=40+80+((value-192)*(93-(80))/(208-192)); return; }
if (value > 176) { *res=40+70+((value-176)*(80-(70))/(192-176)); return; }
if (value > 160) { *res=40+61+((value-160)*(70-(61))/(176-160)); return; }
if (value > 128) { *res=40+45+((value-128)*(61-(45))/(160-128)); return; }
if (value > 48) { *res=40+8+((value-48)*(45-(8))/(128-48)); return; }
if (value > 32) { *res=40+-3+((value-32)*(8-(-3))/(48-32)); return; }
if (value > 16) { *res=40+-17+((value-16)*(-3-(-17))/(32-16)); return; }
if (value > 4) { *res=40+-35+((value-4)*(-17-(-35))/(16-4)); return; }
// В OBD -40, а в HFM -59, поэтому так сделал:
*res = value;
return;
}
.........
.........
.........
__________________
STM32F042
PIC18F25k80
hfmscan вне форума   Ответить с цитированием
Старый 05.02.2015, 00:28   #5
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Russia, Orel
Возраст: 39
Сообщений: 4,501
Вес репутации: 4370/124
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: PIC18F25k80 vs PIC18F26k80.

Цитата:
Сообщение от hfmscan Посмотреть сообщение
вот например функция (приведена частично) которая пересчитывает значение переменной по определенному закону, вся функция занимает 4 кило памяти программ. что в ней можно оптимизировать?
Классика. Сразу бросается в глаза ваше:
Код:
if (calc==0x01) {}
if (calc==0x02)  {}
if (calc==0x03)  {}
...
if (calc==0x3A){}
После проверки одного из условий, совпадения этого условия и выполнения блока {} будет выполнена проверка всех других условий if(), которые не совпадут. Потеря произвдительности. Вы бы хоть чуть-чуть почитали о рефакторинге С-кода. Дальше смотреть простыню (код) при условии, что вы задали вопрос "что в ней можно оптимизировать?" смысла нет.
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 05.02.2015, 00:52   #6
FlashBack
Senior Member
 
Аватар для FlashBack
 
Регистрация: 16.02.2010
Адрес: Грузия, Тбилиси
Возраст: 34
Сообщений: 2,233
Вес репутации: 2337/77
FlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond repute
По умолчанию Re: PIC18F25k80 vs PIC18F26k80.

Цитата:
Сообщение от hfmscan Посмотреть сообщение
вот например функция (приведена частично) которая пересчитывает значение переменной по определенному закону, вся функция занимает 4 кило памяти программ. что в ней можно оптимизировать?
А мне понравились операции float c переменной word...
Дальше промолчу, там много страшного
FlashBack вне форума   Ответить с цитированием
Старый 05.02.2015, 07:40   #7
hfmscan
Senior Member
 
Аватар для hfmscan
 
Регистрация: 17.01.2013
Адрес: Москва
Возраст: 43
Сообщений: 415
Вес репутации: 243/28
hfmscan has a spectacular aura abouthfmscan has a spectacular aura abouthfmscan has a spectacular aura about
Отправить сообщение для hfmscan с помощью ICQ
По умолчанию Re: PIC18F25k80 vs PIC18F26k80.

Про CASE я знаю, но не люблю его использовать... я понимаю в данном случае что зайдя в ветку для калс 01 она пройдет дальше по всем, это все понятно, но это не смущает ни разу... в этой функции скорость не важна... можно напихать ретурнов но это только увеличит код...
не уверен что case поможет мне с размером.

а вот про умножение ворда на флоат я не очень понял - что не так? как написать правильно? и пожалуйста по другим косякам скажите, я переживу вашу критику

PS: если страшное это рассчет
if (calc==0x3A) { и далее то я так понимаю компилятор сам пересчитает константы и приведет в божеский вид эти выражения...
__________________
STM32F042
PIC18F25k80

Последний раз редактировалось hfmscan; 05.02.2015 в 07:46.
hfmscan вне форума   Ответить с цитированием
Старый 05.02.2015, 09:21   #8
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Russia, Orel
Возраст: 39
Сообщений: 4,501
Вес репутации: 4370/124
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: PIC18F25k80 vs PIC18F26k80.

Цитата:
Сообщение от hfmscan Посмотреть сообщение
Про CASE я знаю, но не люблю его использовать... я понимаю в данном случае что зайдя в ветку для калс 01 она пройдет дальше по всем, это все понятно, но это не смущает ни разу... в этой функции скорость не важна... можно напихать ретурнов но это только увеличит код...
не уверен что case поможет мне с размером.

а вот про умножение ворда на флоат я не очень понял - что не так? как написать правильно? и пожалуйста по другим косякам скажите, я переживу вашу критику
Тут следовало бы сказать "спасибо", а он оправдывается. Кто вам деньги платит за такой код?

Цитата:
Сообщение от hfmscan Посмотреть сообщение
PS: если страшное это рассчет
if (calc==0x3A) { и далее то я так понимаю компилятор сам пересчитает константы и приведет в божеский вид эти выражения...
Бог вам в помощь.
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 05.02.2015, 09:29   #9
hfmscan
Senior Member
 
Аватар для hfmscan
 
Регистрация: 17.01.2013
Адрес: Москва
Возраст: 43
Сообщений: 415
Вес репутации: 243/28
hfmscan has a spectacular aura abouthfmscan has a spectacular aura abouthfmscan has a spectacular aura about
Отправить сообщение для hfmscan с помощью ICQ
По умолчанию Re: PIC18F25k80 vs PIC18F26k80.

на switch переписал, минус почти 400 байт, это хорошо...

с константами щас попробую посчитать сам и посмотреть будет выигрыш или нет...
__________________
STM32F042
PIC18F25k80
hfmscan вне форума   Ответить с цитированием
Старый 05.02.2015, 10:06   #10
hfmscan
Senior Member
 
Аватар для hfmscan
 
Регистрация: 17.01.2013
Адрес: Москва
Возраст: 43
Сообщений: 415
Вес репутации: 243/28
hfmscan has a spectacular aura abouthfmscan has a spectacular aura abouthfmscan has a spectacular aura about
Отправить сообщение для hfmscan с помощью ICQ
По умолчанию Re: PIC18F25k80 vs PIC18F26k80.

вычислил где мог выражения сам, код стал больше на 40 байт...

кстати один этот кусок занимает 400 байт кода... что с ним делать?

Цитата:
case 0x3A: {
// В OBD2 макс 215* а в HFM 300, поэтому надо ограничить
if (value > 224) { *res=152+((value-224)*(188)/(31)); if (*res > 0xFF) *res = 0xFF; return; }
if (value > 208) { *res=133+((value-208)*(19)/(16)); if (*res > 0xFF) *res = 0xFF; return; }
if (value > 192) { *res=120+((value-192)*(13)/(16)); return; }
if (value > 176) { *res=110+((value-176)*(10)/(16)); return; }
if (value > 160) { *res=101+((value-160)*(9)/(16)); return; }
if (value > 128) { *res=85+((value-128)*(16)/(32)); return; }
if (value > 48) { *res=48+((value-48)*(37)/(80)); return; }
if (value > 32) { *res=37+((value-32)*(5)/(16)); return; }
if (value > 16) { *res=23+((value-16)*(-20)/(16)); return; }
if (value > 4) { *res= 5+((value-4)*(-52)/(12)); return; }
// В OBD -40, а в HFM -59, поэтому так сделал:
*res = value;
return;
}
__________________
STM32F042
PIC18F25k80

Последний раз редактировалось hfmscan; 05.02.2015 в 10:14.
hfmscan вне форума   Ответить с цитированием
Старый 05.02.2015, 14:34   #11
siarzhuk
Senior Member
 
Аватар для siarzhuk
 
Регистрация: 08.11.2014
Возраст: 48
Сообщений: 152
Вес репутации: 1161/27
siarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud of
По умолчанию Re: PIC18F25k80 vs PIC18F26k80.

Цитата:
Сообщение от hfmscan Посмотреть сообщение
вычислил где мог выражения сам, код стал больше на 40 байт...
Сравните asm-выхлоп предыдущего варианта и нового. Сделайте выводы как поступать не следует. Для упрощения делайте изменения шаг за шагом и сравнивайте.

Цитата:
Сообщение от hfmscan Посмотреть сообщение
кстати один этот кусок занимает 400 байт кода... что с ним делать?
Тут меняются коэффициенты а функция одна и та-же - попробуйте завести массив unsigned char [10][4] затем циклом по первой колонке найти нужную строку и распорядиться её коэффициентами согласно формуле. Колонку множителя сдвиньте в положительную область, приплюсовав ко всем значениям 52 и вычев те же 52 в формуле. Подозреваю, что "обрезание" содержимого по адресу res до 0хFF не повредит и остальным комбинациям коэффициентов, да? ;-)

Цитата:
Сообщение от hfmscan Посмотреть сообщение
void TranslateValue(static word *res, static word value, static uchar calc, static uchar *len) {
static int vi;
Включите предупреждения компилятора на максимально параноидальный уровень и разберитесь с причинами их вызывающими. У вас vi в функции не используется - и извне её недоступна - вероятнее всего компилятор её втихаря выбросил - но чем чёрт не шутит.

2 all: Не сказать, чтобы понимаю для чего здесь в параметрах функции используется модификатор static. В каноническом С эти переменные суть автоматические копии переданных в неё параметров выделенные на стеке функции . По всему выходит компилятор помещает их в глобальную область оставляя видимыми лишь внутри функции? А зачем? Поясните, если не трудно, пожалуйста. Спасибо!
siarzhuk вне форума   Ответить с цитированием
Старый 05.02.2015, 14:43   #12
hfmscan
Senior Member
 
Аватар для hfmscan
 
Регистрация: 17.01.2013
Адрес: Москва
Возраст: 43
Сообщений: 415
Вес репутации: 243/28
hfmscan has a spectacular aura abouthfmscan has a spectacular aura abouthfmscan has a spectacular aura about
Отправить сообщение для hfmscan с помощью ICQ
По умолчанию Re: PIC18F25k80 vs PIC18F26k80.

вот функцию которая занимает 400 байт я верчу уже полдня...
сейчас пришел к такому варианту (но не добил еще)
Цитата:
rom uchar CT[] = {
224,188, 31, 152,
208, 19, 16, 133,
192, 13, 16, 120,
176, 10, 16, 110,
160, 9, 16, 101,
128, 16, 32, 85,
48, 37, 80, 48,
32, 5, 16, 37,
16, 14, 16, 23,
4, 18, 12, 5,
0, 1, 1, 0 };

void CalcBosch(static word value) {
static uchar a;
static uchar b;
static uchar c;
static uchar d;
static uchar v;

FSR0 = (int)CT;
do {
a = POSTINC0;
b = POSTINC0;
c = POSTINC0;
d = POSTINC0;
} while (lowbyte(value) > a);

lowbyte(value) -= a;

value = value * b;
value = value / c;
value = value + d;
if (value > 0xFF) value = 0xFF;
}
умножение и деление по 32 байта занимают, сейчас наверное буду делать коэффициент b/c и умножать его на 128 чтобы умножение было только на эту получившуюся константу, а после этого сдвиг вправо на 7...

статик - я его по всей программе набил чтобы все переменные по неким адресам были пробиты и никаких стеков не было при входе в функции.... большой выигрышь в размере кода http://www.microchip.su/showpost.php...9&postcount=14
__________________
STM32F042
PIC18F25k80

Последний раз редактировалось hfmscan; 05.02.2015 в 14:55.
hfmscan вне форума   Ответить с цитированием
Старый 05.02.2015, 15:04   #13
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Russia, Orel
Возраст: 39
Сообщений: 4,501
Вес репутации: 4370/124
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: PIC18F25k80 vs PIC18F26k80.

Это что-то новое. Я ни разу не видел, чтобы параметр функции был static. Или вы троллите?
Код:
void CalcBosch(static word value) {
    static uchar a;
    static uchar b;
    static uchar c;
    static uchar d;
    static uchar v;
 
    ...

    if (value > 0xFF) value = 0xFF;
}
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 05.02.2015, 15:07   #14
hfmscan
Senior Member
 
Аватар для hfmscan
 
Регистрация: 17.01.2013
Адрес: Москва
Возраст: 43
Сообщений: 415
Вес репутации: 243/28
hfmscan has a spectacular aura abouthfmscan has a spectacular aura abouthfmscan has a spectacular aura about
Отправить сообщение для hfmscan с помощью ICQ
По умолчанию Re: PIC18F25k80 vs PIC18F26k80.

что вы меня всегда в чем то подозреваете?
вот мой реальный опыт по ссылке http://www.microchip.su/showpost.php...9&postcount=14
я думаю как это работает вам должно быть понятно, просто создайте функцию где все статик и переменные внутри и параметры и сравните рахмер без статик и с ним... и код посмотрите, все увидете
__________________
STM32F042
PIC18F25k80
hfmscan вне форума   Ответить с цитированием
Старый 05.02.2015, 15:21   #15
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Russia, Orel
Возраст: 39
Сообщений: 4,501
Вес репутации: 4370/124
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: PIC18F25k80 vs PIC18F26k80.

Цитата:
Сообщение от hfmscan Посмотреть сообщение
что вы меня всегда в чем то подозреваете?
вот мой реальный опыт по ссылке http://www.microchip.su/showpost.php...9&postcount=14
я думаю как это работает вам должно быть понятно, просто создайте функцию где все статик и переменные внутри и параметры и сравните рахмер без статик и с ним... и код посмотрите, все увидете
Нельзя вас не подозревать, вы ж можете убедить зрителей в хорошем знании языка Си (чего на самом деле нет). Чуть-чуть понастырнее и продавите.
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 05.02.2015, 15:26   #16
hfmscan
Senior Member
 
Аватар для hfmscan
 
Регистрация: 17.01.2013
Адрес: Москва
Возраст: 43
Сообщений: 415
Вес репутации: 243/28
hfmscan has a spectacular aura abouthfmscan has a spectacular aura abouthfmscan has a spectacular aura about
Отправить сообщение для hfmscan с помощью ICQ
По умолчанию Re: PIC18F25k80 vs PIC18F26k80.

ага, в этом и цель ... убедить!
ну если вам заняться нечем, то продолжайте флудить...
по теме, как я понимаю, сказать нечего, помочь тоже... только обосрать
__________________
STM32F042
PIC18F25k80
hfmscan вне форума   Ответить с цитированием
Старый 05.02.2015, 15:35   #17
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Russia, Orel
Возраст: 39
Сообщений: 4,501
Вес репутации: 4370/124
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: PIC18F25k80 vs PIC18F26k80.

Цитата:
Сообщение от hfmscan Посмотреть сообщение
ага, в этом и цель ... убедить!
ну если вам заняться нечем, то продолжайте флудить...
по теме, как я понимаю, сказать нечего, помочь тоже... только обосрать
Можно и ума купить. Кстати, я вам уже помог.

И когда про параметр static спросил, тоже помог. У меня компилятор получше вашего и он на такой синтакис ругается. Вы критику нормально воспринимайте.
Миниатюры
static.PNG  
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 05.02.2015, 15:40   #18
hfmscan
Senior Member
 
Аватар для hfmscan
 
Регистрация: 17.01.2013
Адрес: Москва
Возраст: 43
Сообщений: 415
Вес репутации: 243/28
hfmscan has a spectacular aura abouthfmscan has a spectacular aura abouthfmscan has a spectacular aura about
Отправить сообщение для hfmscan с помощью ICQ
По умолчанию Re: PIC18F25k80 vs PIC18F26k80.

ума у вас купить?
спасибо за помощь.
как обычно бывает - видишь очевидное но самому лень исправить, пока носом не ткнут... я не умаляю ваших заслуг

выше АлексБак говорил что-то про кривое умножение у меня - можете сказать что не так? код то рабочий... но может можно сделать лучше (чтобы меньше занимало) - с удовольствием выслушаю и поправлю
__________________
STM32F042
PIC18F25k80
hfmscan вне форума   Ответить с цитированием
Старый 05.02.2015, 15:42   #19
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Russia, Orel
Возраст: 39
Сообщений: 4,501
Вес репутации: 4370/124
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: PIC18F25k80 vs PIC18F26k80.

Цитата:
Сообщение от hfmscan Посмотреть сообщение
ума у вас купить?
спасибо за помощь.
как обычно бывает - видишь очевидное но самому лень исправить, пока носом не ткнут... я не умаляю ваших заслуг

выше АлексБак говорил что-то про кривое умножение у меня - можете сказать что не так? код то рабочий... но может можно сделать лучше (чтобы меньше занимало) - с удовольствием выслушаю и поправлю
Еще раз посмотрите сообщение. Я про ваш static дополнил. Не Москва, а Монголия Улан-Батор.
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 05.02.2015, 15:45   #20
hfmscan
Senior Member
 
Аватар для hfmscan
 
Регистрация: 17.01.2013
Адрес: Москва
Возраст: 43
Сообщений: 415
Вес репутации: 243/28
hfmscan has a spectacular aura abouthfmscan has a spectacular aura abouthfmscan has a spectacular aura about
Отправить сообщение для hfmscan с помощью ICQ
По умолчанию Re: PIC18F25k80 vs PIC18F26k80.

ну у меня то работает.. компилятор C18 v3.47, как я выше давал ссылку - когда я везде расставил эти статик то размер кода существенно уменьшился! если я сейчас это все уберу, то мой проект будет невозможно собрать
ну и самое главное я понимаю суть этого слова и как его обрабатывает компилятор (смотрю исходник в асме) и мне в этом плане все нравится...
__________________
STM32F042
PIC18F25k80
hfmscan вне форума   Ответить с цитированием
Старый 05.02.2015, 17:57   #21
hfmscan
Senior Member
 
Аватар для hfmscan
 
Регистрация: 17.01.2013
Адрес: Москва
Возраст: 43
Сообщений: 415
Вес репутации: 243/28
hfmscan has a spectacular aura abouthfmscan has a spectacular aura abouthfmscan has a spectacular aura about
Отправить сообщение для hfmscan с помощью ICQ
По умолчанию Re: PIC18F25k80 vs PIC18F26k80.

что-то я затупил...
не выполняется выход из цикла

Цитата:
// Расчет датчика темп ОЖ Бош

rom uchar CT[] = {
224, 255, 152,
208, 152, 133,
192, 104, 120,
176, 80, 110,
160, 72, 101,
128, 64, 85,
48, 60, 48, // 59.2
32, 40, 37,
16, 112, 23,
4, 192, 5,
0, 128, 0 };


// расчет датчиков Бош: ДТОЖ(0) и ДТВ(иначе)
uchar CalcBoschSensor(static word value, static uchar sensor) {
static uchar a;
static uchar b;
static uchar d;
static uchar v;
static uchar e;

highbyte(value) = 0;
v = lowbyte(value);

if (sensor == 0)
TBLPTR = (int)CT;
else
TBLPTR = (int)IAT;

do {
_asm TBLRDPOSTINC _endasm
a = TABLAT;
_asm TBLRDPOSTINC _endasm
b = TABLAT;
_asm TBLRDPOSTINC _endasm
d = TABLAT;

e = 0xFF;
if (v > a) e=0;

} while (e);

return a;
}
т.е. суть кода - бегу по первой колонке массива CT и когда искомое (младший байт value) становится больше чем значение первой колонки, нужно выйти из цикла...
писал по разному, но либо выходит сразу, либо не выходит никогда...
ничего не понимаю в чем причина...
__________________
STM32F042
PIC18F25k80
hfmscan вне форума   Ответить с цитированием
Старый 04.02.2018, 13:42   #22
hfmscan
Senior Member
 
Аватар для hfmscan
 
Регистрация: 17.01.2013
Адрес: Москва
Возраст: 43
Сообщений: 415
Вес репутации: 243/28
hfmscan has a spectacular aura abouthfmscan has a spectacular aura abouthfmscan has a spectacular aura about
Отправить сообщение для hfmscan с помощью ICQ
По умолчанию Re: PIC18F25k80 vs PIC18F26k80.

Здравствуйте,
подскажите по такой проблеме.
В проекте есть некий unit в котором некий код на 1.2 кБ.
Если я в основной программе через #ifdef убрал вызовы на эти функции и даже закоментарил #include "unit2.h" то размер проекта практически не изменяется... приходится череp #ifdef еще сам код в юните урезать.... что не совсем удобно...
Может я что-то неправильно делаю?
и собственно тоже самое относится к системным файлам, например strings - если я использую только одну функцию из модуля, то он весь в проект вставляется или только нужный код? подозреваю что весь, а как бы сделать оптимально ?

Заранее благодарен за ответ...
__________________
STM32F042
PIC18F25k80
hfmscan вне форума   Ответить с цитированием
Старый 04.02.2018, 14:13   #23
siarzhuk
Senior Member
 
Аватар для siarzhuk
 
Регистрация: 08.11.2014
Возраст: 48
Сообщений: 152
Вес репутации: 1161/27
siarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud of
По умолчанию Re: PIC18F25k80 vs PIC18F26k80.

Цитата:
Сообщение от hfmscan Посмотреть сообщение
В проекте есть некий unit в котором некий код на 1.2 кБ.
Если я в основной программе через #ifdef убрал вызовы на эти функции и даже закоментарил #include "unit2.h" то размер проекта практически не изменяется... приходится череp #ifdef еще сам код в юните урезать.... что не совсем удобно...
Может я что-то неправильно делаю?
и собственно тоже самое относится к системным файлам, например strings - если я использую только одну функцию из модуля, то он весь в проект вставляется или только нужный код? подозреваю что весь, а как бы сделать оптимально ?
В map-файл смотреть надо для полной уверенности - там перечисляется, что линкер включил в образ, а что - нет. По поводу невызываемого кода - посмотрите настройки компилятора/линкера - что-то на тему "каждой функции своя секция", "оптимизация во время линковки". Стандартные библиотеки как правило реализуют каждую функцию в отдельном С файле и линкер срабатывает оптимально в любой ситуации. Для пользовательских библиотек мало кто занимается такими глупостями - поэтому вероятность того, что линкер включит в образ весь код библиотеки выше. В любом случае плясать надо от map-файла.
siarzhuk вне форума   Ответить с цитированием
Старый 05.02.2018, 20:57   #24
hfmscan
Senior Member
 
Аватар для hfmscan
 
Регистрация: 17.01.2013
Адрес: Москва
Возраст: 43
Сообщений: 415
Вес репутации: 243/28
hfmscan has a spectacular aura abouthfmscan has a spectacular aura abouthfmscan has a spectacular aura about
Отправить сообщение для hfmscan с помощью ICQ
По умолчанию Re: PIC18F25k80 vs PIC18F26k80.

Спасибо, значит тупо придется в модуле дефайн писать...
PS: я и не думал что каждая функция в отдельном файле, это по уму (с точки зрения размера кода)
__________________
STM32F042
PIC18F25k80
hfmscan вне форума   Ответить с цитированием
Старый 06.02.2018, 11:28   #25
siarzhuk
Senior Member
 
Аватар для siarzhuk
 
Регистрация: 08.11.2014
Возраст: 48
Сообщений: 152
Вес репутации: 1161/27
siarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud of
По умолчанию Re: PIC18F25k80 vs PIC18F26k80.

Цитата:
Сообщение от hfmscan Посмотреть сообщение
Спасибо, значит тупо придется в модуле дефайн писать...
Да, навскидку по мануалу тоже не нашёл там секционирования функций. С опциями remove dead code / remove unreachable code уже игрались?
Цитата:
Сообщение от hfmscan Посмотреть сообщение
PS: я и не думал что каждая функция в отдельном файле, это по уму (с точки зрения размера кода)
Скорее так исторически сложилось для библиотек.
siarzhuk вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Имитатор DS18B20 Filya44 Вопросы начинающих 14 12.03.2012 17:39
C18. Как объявить переменную с указанием адреса? FlashBack Продукция MICROCHIP 8 03.05.2011 15:01
Как узнать реальный размер программы? tolusik1984 Продукция MICROCHIP 5 08.05.2010 13:27
Как уменьшить шум источника питания? PClamp Источники питания и силовая электроника 12 09.03.2010 15:19
mcc18 как узнать размер кода и RAM .. atlant Продукция MICROCHIP 2 27.01.2010 19:46


Часовой пояс GMT +3, время: 04:25.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot