udata_heap_1.o' can not fit the section.

nsatyish wrote on Tuesday, June 12, 2012:

any one help me to edit the linker file for my project.actually i am using pic 18f26j50 with c18 compiler in mplab i am getting this error while compile my file
Error - section ‘.udata_heap_1.o’ can not fit the section. Section ‘.udata_heap_1.o’ length=0x00000400
how to rectify this one…

rtel wrote on Tuesday, June 12, 2012:

Look at the file 18f452.lkr in FreeRTOS/Demo/PIC18_MPLAB.  It creates a large data bank called BIG_BLOCK to fit the FreeRTOS heap, you will have to do a similar thing in your linker script.

Note that there are (documented) problems when a stack allocated from this big block crosses a page boundary, although you will find fixes for this in FreeRTOS Interactive and other locations - but still the PIC18 is far from an ideal target to run any kind of pre-emptive RTOS because of its paging scheme and hardware stack.


nsatyish wrote on Tuesday, June 12, 2012:

dear sir i have edited my linker file for pic18f26j50 and it also compiled successfully but the problem now is its not working with hardware…i am getting some warnings.the warnings are shown below…
D:\sathish\programs\FreeRTOSV7.1.1\led.c:42:Warning  type qualifier mismatch in assignment
D:\sathish\programs\FreeRTOSV7.1.1\led.c:43:Warning  type qualifier mismatch in assignment
D:\sathish\programs\FreeRTOSV7.1.1\led.c:44:Warning  type qualifier mismatch in assignment

my program is shown below…

#include “p18f26j50.h”

#include “.\Source\include\FreeRTOS.h”
#include “.\Source\include\task.h”
#include “delays.h”

     #pragma config WDTEN = OFF          //WDT disabled (enabled by SWDTEN bit)#elif defined(PIC18F26J50_PIM) || defined(PIC18F_STARTER_KIT_1) || defined(PIC18F47J53_PIM)
//  defined(PIC18F26J50_PIM) || defined(PIC18F_STARTER_KIT_1) || defined(PIC18F47J53_PIM)
     #pragma config PLLDIV = 1           //Divide by 3 (12 MHz oscillator input)
     #pragma config STVREN = ON            //stack overflow/underflow reset enabled
     #pragma config XINST = OFF          //Extended instruction set disabled
     #pragma config CPUDIV = OSC1        //No CPU system clock divide
     #pragma config CP0 = ON            //Program memory is not code-protected
     #pragma config OSC = HSPLL          //HS oscillator, PLL enabled, HSPLL used by USB
     #pragma config T1DIG = OFF          //Sec Osc clock source may not be selected, unless T1OSCEN = 1
     #pragma config LPT1OSC = OFF        //high power Timer1 mode
     #pragma config FCMEN = OFF          //Fail-Safe Clock Monitor disabled
     #pragma config IESO = OFF           //Two-Speed Start-up disabled
     #pragma config WDTPS = 32768        //1:32768
     #pragma config DSWDTOSC = INTOSCREF //DSWDT uses INTOSC/INTRC as clock
     #pragma config RTCOSC = T1OSCREF    //RTCC uses T1OSC/T1CKI as clock
     #pragma config DSBOREN = OFF        //Zero-Power BOR disabled in Deep Sleep
     #pragma config DSWDTEN = OFF        //Disabled
     #pragma config DSWDTPS = 8192       //1:8,192 (8.5 seconds)
     #pragma config IOL1WAY = OFF        //IOLOCK bit can be set and cleared
     #pragma config MSSP7B_EN = MSK7     //7 Bit address masking
     #pragma config WPFP = PAGE_1        //Write Protect Program Flash Page 0
     #pragma config WPEND = PAGE_0       //Start protection at page 0
     #pragma config WPCFG = OFF          //Write/Erase last page protect Disabled
     #pragma config WPDIS = OFF          //WPFP, WPEND, and WPCFG bits ignored
void vLed1( void *pvParameters );
void vLed2( void *pvParameters );
void vLed3( void *pvParameters );

void main(void)
xTaskCreate(vLed1,“Led 1”, 400, NULL, 1, NULL );
xTaskCreate(vLed2,“Led 2”, 400, NULL, 1, NULL );
xTaskCreate(vLed3,“Led 3”, 400, NULL, 1, NULL );

void vLed1( void *pvParameters )
void vLed2( void *pvParameters )
void vLed3( void *pvParameters )

actually i am getting warning in task creation…the task creation in my program is correct r not…actually i am new to rtos…so i cant find out the problem help me…
thank u in advance…