Hi,

> I need to disable interrupts for some functions because they are called from
> main() and from interrupt. I was trying __critical keyword but it seems to
> be doing nothing. Does __critical work for PIC16 port?

__critical is (still) a nop for PIC16.

> If it doesn't, how do you do it?

<mail subject="Re: [Sdcc-user] __critical does nothing with PIC18F4550
?" date="2011-11-06">

You can partially emulate its effect by disabling interrupts
manually and see if that helps.

/* All code untested. */

uint8_t iflags = (INTCON & 0xC0);
INTCON &= ~0xC0;
// critical code here
INTCON |= iflags;

or wrapped in a macro:

#define CRITICAL(CODE) do { \
  static unsigned char __sdcc_iflags = (INTCON & 0xC0); \
  INTCON &= ~0xC0; \
  do { CODE; } while (0); \
  INTCON |= __sdcc_iflags; \
} while(0)

CRITICAL(low = 1; high = 42);
// or
CRITICAL(critical_function());

Hope that helps,
Raphael
</mail>

------------------------------------------------------------------------------
Virtualization & Cloud Management Using Capacity Planning
Cloud computing makes use of virtualization - but cloud computing 
also focuses on allowing computing to be delivered as a service.
http://www.accelacomm.com/jaw/sfnl/114/51521223/
_______________________________________________
Sdcc-user mailing list
Sdcc-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sdcc-user

Reply via email to