We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
since working with RTX, to enable interrupt should be operated by os_enable_isr(), and directly setting bit in IE is no useful......but, the problem is why it failed to call os_enable_isr(4) to enable serial port0 interrupt.......anybody can give me some advice on it. thanks in advance.
According to the result of trace, it failed when to check a base-address add the specified interrupt number, the address(in Code address) return 0, then it return fail information.......why did it return fail? what should I put in the address? any other way to enable interrupt except the RTX function os_enabled_interrupt()?
Did you create an interrupt function? Keil Support
Yes, of course. Now I can get a very simple example with interrupt and RTX-51 tasks to work well now. But my original program still can work, but the two programs are in the same proccess on interrupt. Thanks very much
Can anybody give me some information about it? Thanks in advance.
I got this working in RTX51. It was pretty straight-forward. 1. Create the interrupt service routine as you would in a standard Keil C51 program. This is the int0 function in the following example. 2. Create some code that enables the interrupt source. The statements EX0 = 1; and IT0 = 1; in the startup task do this. 3. Call the os_enable_isr function and pass the interrupt number. This is also done in the startup task. For example:
#include <rtx51.h> #include <reg51.h> #include <stdio.h> #define STARTUP_TASK 0 //----------------------------------------------- //----------------------------------------------- void int0 (void) interrupt 0 { static unsigned int i; i++; } //----------------------------------------------- //----------------------------------------------- void task0 (void) _task_ STARTUP_TASK { os_set_slice (1000); /* Set for OSC Frequency / 10,000 */ EX0 = 1; /* Enable External Int 0 */ IT0 = 1; /* Edge-triggered */ os_enable_isr (0); /* Enable interrupt #0 */ while (1) { os_wait (K_TMO, 100, NULL); } } //----------------------------------------------- //----------------------------------------------- void main (void) { os_start_system (STARTUP_TASK); }
Thanks very much. I've got it work now.