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
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.
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.