Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: macro funktio void argumentilla

timo4ts [25.12.2009 10:40:19]

#

moi,

kuinkas tälläinen pitäis tehdä, ettei kääntäjä herjais siitä.
käytän kääntäjänä sdcc kääntäjää.

#define FSM_RESET()                                        \
	do {                                                   \
		INT_ENABLE (INUM_RF, INT_OFF);                     \
		SPP_DISABLE_TIMEOUT();                             \
		sppIntData.mode = SPP_IDLE_MODE;                   \
		SPP_FAST_POWER_DOWN();                             \
	} while (0)

ja kutsun

FSM_RESET();

kääntäjä herjaa, että FSM_RESET ei ole functio

hunajavohveli [25.12.2009 12:14:42]

#

Pystytkö käyttämään yksinkertaisempia makroja tai makroja yleensäkään? Sinänsä en näe tuossa mitään vikaa, esim.

#define FSM_RESET()                                        \
	do {                                                   \
		INT_ENABLE (INUM_RF, INT_OFF);                     \
		SPP_DISABLE_TIMEOUT();                             \
		sppIntData.mode = SPP_IDLE_MODE;                   \
		SPP_FAST_POWER_DOWN();                             \
	} while (0)

int main(void)
{
	FSM_RESET();
	return 0;
}

Esiprosessoituu gcc:llä kiltisti muotoon:

int main(void)
{
 do { INT_ENABLE (INUM_RF, INT_OFF); SPP_DISABLE_TIMEOUT(); sppIntData.mode = SPP_IDLE_MODE; SPP_FAST_POWER_DOWN(); } while (0);
 return 0;
}

En tosin tätä sdcc:tä juuri tunne.

fronty [25.12.2009 18:05:02]

#

Kun kokeilin, tuo kyllä toimii SDCC:llä. Oletko varmasti määritellyt tuon makron samassa tiedostossa tai sellaisessa headerissa, joka on jotakin reittiä otettu mukaan soppaan?

$ sdcc --version
SDCC : mcs51 2.9.0 #5416 (Dec 25 2009) (UNIX)
$ uname -a
FreeBSD crayon 8.0-RELEASE FreeBSD 8.0-RELEASE #1: Tue Dec 22 20:58:42 EET 2009     root@crayon:/usr/obj/usr/src/sys/CRAYON  amd64

Käänsin, en asentanut pakettia.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta