Nios® V/II Embedded Design Suite (EDS)
Support for Embedded Development Tools, Processors (SoCs and Nios® V/II processor), Embedded Development Suites (EDSs), Boot and Configuration, Operating Systems, C and C++

Can't run code out of flash!

Altera_Forum
Honored Contributor II
1,109 Views

I am trying to run my Nios II code from flash with no success. I can run from the IDE, no problem when program memory is in RAM. I then change the build for flash. The flash programmer works fine - no errors. When I set the PC to base address of flash (using FS2's CLI) and issue the "GO" - nothing happens. I also tried to click the "RUN as Hardware" button in the IDE - same result. I also tried to boot from internal ROM and call my app in flash from a function pointer (recommended by "smcnutt") but it does nothing. In fact when I use the FS2's CLI, after I type GO I can't halt. I can initially step fine - but at some point it gets lost or something???? 

 

any suggesstions? 

 

I don't know if it's related but when I load my code built for RAM - into RAM, and then set the PC mannually from FS2's CLI and type GO - same result, nothing happens...
0 Kudos
7 Replies
Altera_Forum
Honored Contributor II
350 Views

Silly question but how exactly are you specifying that your program be located in flash? The system library properties dialog in the IDE allows you to select memory devices for several things - .text, .rodata, .rwdata, etc. Obviously .text (code) and .rodata (read only data) can be in flash, but anything that requires the CPU to write/modify data (.rwdata and stack) must be in a RAM of some sort.

0 Kudos
Altera_Forum
Honored Contributor II
350 Views

I have the .text set to flash and the other 2 set to RAM. This is how I get the code compiled for flash. Then I run the Flash programmer and it works fine - code programmed to flash successfully. When I reset, the "Boot ROM" message comes up, but when I use the function call below (where SOME_ADDR is the address of flash) nothing happens. In addition I try to set the PC to 0x100000 (flash base) directly using the CLI, and then GO - nothing happens. 

 

 

# define SOME_ADDR 0x .... 

 

void whatever () 

void (*foo)(void) = (void (*)(void)) SOME_ADDR; 

 

... 

 

foo(); /* call SOME_ADDR */ 

 

}
0 Kudos
Altera_Forum
Honored Contributor II
350 Views

Hi lemonoje, 

 

Can you post your section info for the RAM code (e.g. objdump -h)? 

 

Regards, 

--Scott
0 Kudos
Altera_Forum
Honored Contributor II
350 Views

Scott, 

Not sure what you mean. How/where do I get that? I was just looking around trying to find a map file. Does Nios II make a map file so you can see where everything falls?? 

 

John
0 Kudos
Altera_Forum
Honored Contributor II
350 Views

> How/where do I get that? 

 

Use objdump for your elf file that's built for RAM: 

 

nios2-elf-objdump -h ram.elf 

 

> Does Nios II make a map file ... 

 

I don't think it does by default ... you need to add it as 

an option (-Map mapfile) to ld. 

 

--Scott
0 Kudos
Altera_Forum
Honored Contributor II
350 Views

I thought you could just load code pretty much wherever you want, set the PC and GO! 

 

Guess it's not that simple. After I'm done re-synthesizing, I'll get that objdump -h. What will that tell me? 

 

John
0 Kudos
Altera_Forum
Honored Contributor II
350 Views

Alright - I got something working, I just don't know what it means. I set the IDE up as follows: 

 

.text - ext_SRAM 

.rodata - int_SRAM 

.rwdata - int_SRAM 

 

This should put the boot copier at the beginning of flash so that when the board powers up - the copier will copy the program to RAM from flash and run it from RAM. THIS WORKS! the code runs fine.  

 

What should the "Configuration:" setting be? Release or Debug? One thing I noticed. I can't run at all from SRAM with the IDE Configuration: set to the Release setting. 

 

hmmm why?
0 Kudos
Reply