Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

C pointer към процедура
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=330
Страница 1 от 1

Автор:  bateAz [ Съб Яну 22, 2005 8:31 pm ]
Заглавие:  C pointer към процедура

Да си умреш от срам! Залегнал съм над един компилатор без хелп. Искам да вкарам в една СТРУКТУРА указатели към процедура void prawi_neshto(void) .
Kак се прави тази магия и как после се вика тази процедура.

Знам че е нескромно, ама ми е спешно!!!!

Автор:  bateAz [ Съб Яну 22, 2005 8:37 pm ]
Заглавие: 

Значи да поясня - в структурата адресът е точно който трябва ( проверено с DUMP ). Как се вика бе, брато? Какво да напиша, та да го извикам като подпрограма?

Автор:  danov [ Съб Яну 22, 2005 9:31 pm ]
Заглавие: 

typedef struct _tip_na_structurata {
void (*ime_na_ukazatelja) (void);
...... drugite neshta ....
} tip_na_structurata;

void prawi_neshto(void) {
.....
}

tip_na_structurata ime = {
prawi_neshto,
.......
};

и викането:
ime. ime_na_ukazatelja ();

Автор:  bateAz [ Съб Яну 22, 2005 10:08 pm ]
Заглавие: 

Да де, ам при мен ime.ime na ukazatelq компилаторът го пропуска като "dummy". Като му махна оптимизациите, изчислява адреса, но не тича да го изпълнява това, дето го пише там. Къде може да съм се оплел?

Автор:  Реконструктор [ Нед Яну 23, 2005 1:56 am ]
Заглавие: 

Къв е тоя компилатор бе, батка. :)
И защо ти е толкова задължително да пазиш именно указател?

Автор:  bateAz [ Нед Яну 23, 2005 1:10 pm ]
Заглавие: 

Реконструктор написа:
Къв е тоя компилатор бе, батка. :)
И защо ти е толкова задължително да пазиш именно указател?


Те там е ключът от палатката - KEIL за 8051, архивна версия от 97 година. Ярето ( IAR ) си го скомпилира без никакви възражения и си работи. Само че IAR ми е още по-архивен и работи под DOS :cry:

Защо пазя указатели? Това чудо получава команди по сериен канал. Всяка команда е найсе байта ( различно ! ) и като я получи, трябва да направи нещо. затова си го реших така : структура със три полета : текст, един интижър ( параметър ) и един поинтер. Все си мисля, че това е добра постановка на задачата, още повече, че то си стана.

Автор:  Реконструктор [ Нед Яну 23, 2005 3:56 pm ]
Заглавие: 

bateAz написа:
и като я получи, трябва да направи нещо.


switch? :)

Автор:  bateAz [ Нед Яну 23, 2005 4:56 pm ]
Заглавие: 

При около 200 команди и почти 80 процедури, ти как би го направил? Така ми изглежда по-пригледно :
. . .
"Z_0120A", KEY, give_stt_number,
"Z_0121A", KEY, give_stt_size,
"K12Z", 0, stop_aux_terminals,
. . .

200 такива реда, свирка на някакъв измислен протокол, в който не виждам никаква логика - свинщина. Освен това голяма част от процедурите се викат и по други причини.

Автор:  danov [ Нед Яну 23, 2005 5:31 pm ]
Заглавие: 

bateAz написа:
Да де, ам при мен ime.ime na ukazatelq компилаторът го пропуска като "dummy". Като му махна оптимизациите, изчислява адреса, но не тича да го изпълнява това, дето го пише там. Къде може да съм се оплел?


а какво става с:
ime.ime_na_ukazatelq();
в смисъл, да не си забравил скобите?

Автор:  bateAz [ Нед Яну 23, 2005 5:48 pm ]
Заглавие: 

Не, просто не бях случил на партньор ( компилатор ). Проблемът е решен, благодаря за отзивчивостта.

Автор:  Реконструктор [ Нед Яну 23, 2005 7:05 pm ]
Заглавие: 

Абе казвах аз, че IAR е боклук. :) Не знам що го превъзнасят толкова.

Автор:  Nikola Kirov [ Пон Яну 24, 2005 2:43 pm ]
Заглавие: 

Ами то Бате аз си е виновен що ползва толкоз архивни версии.
А за IAR имам наблюдения от версиите за PIC,работи си много добре и дава оптимизиран код но има много особенности в работата с него. Поизучиш ли ги веднъж и работата с него става приятна.

Автор:  Реконструктор [ Пон Яну 24, 2005 2:49 pm ]
Заглавие: 

Ми аз доста време работех с него, но също като батето имах постоянни проблеми с указатели - даже бях писал за това. Може да има някви хитрости, за да се накара да работи нормално, но аз мразя софтуер, който е писан от непризнати гении, изразяващи по особен начин своята оригиналност. Програми, които трябва да лъжеш с хитрости, за да ги накараш да следват нормалната, общоприета логика, не стават за нищо, според мен.

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/