This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CCS/TMS320F280045: Delfino to Piccolo merge + cannot load from non-primitive location

Part Number: TMS320F280045
Other Parts Discussed in Thread: C2000WARE

Tool/software: Code Composer Studio

Hello,

I am trying to merge two projects into one. The first code I am using is the example in the C2000 suite under the f2800x examples, spi_ex4_eeprom, and I was able to load the program onto the uC, run it, and verify my EEPROM functionality. 

The second project I am trying to get to work is a purchased software stack that was designed to run on the TMS320F2837xd. So I am attempting to port firmware designed for the Delfino family to a Piccolo chip. I went through the code and cleaned up all the errors and set up the drivers from the C2000 suite for my desired chip.

I am able to get the code to compile and load onto the chip. Everything goes well in the debugger, the program gets loaded but once I try to run the program I get the following: No source available for "0x3fbd92" 

As I work through the program step by step, I can see that the error happens when the function SysCtl_setClock(DEVICE_SETCLOCK_CFG); is called. When I hover over the function, I see the following error: Error: cannot load from non-primitive location (as seen in the screenshot below)

I cannot seem to figure out how to resolve this problem. I have expanded some of the RAM/FLASH locations in the 280045_FLASH_lnk.cmd file as other threads have suggested but it has not changed my outcome. Help would be greatly appreciated.

Thanks,

Jeremy

  • Jeremy,

    It sounds like some of your include paths may still be referencing collateral in the F2837xd device_support/driverlib files. Can you double check the project properties and ensure that all the references to F2837xd have been changed to the F28004x. This also applies to linker command files and similar type of files.

    Regards,
    Ozino
  • Hello Ozino,

    I checked all the includes and they seem to be referencing only files within the project or 28004x driverlib in C2000Ware. See attached screenshot. 

    Is there somewhere else I should look?

    Thanks,

    Jeremy

  • Jeremy,

    What build errors are present in the console window? Did you modify your current linke command file? Or are you using one of the ones provided in C2000Ware?

    Regards,
    Ozino
  • Regarding register window issue and errors, you can try a couple items that may help:
    - Start a new workspace and load a simple C2000Ware example and see that your register window is behaving correctly
    - Check your project properities then under "Build->C2000 Linker->File Search Path" make sure no linker is listed there
    - Next step may be to create a new empty project and add in your necessary files
  • Hello Ozino,

    There are no errors in the console window. The project builds without issue and even loads onto the uC. Then the errors I reported initially are showing up when I try and run the program.

    I attempted your other suggestion by doing the following: I started a clean project and loaded the C2000Ware spi_eeproom example and verified it all worked. Then I added the canopen firmware files and the project stopped running, again, it built clean and loaded fine but it does not run.
  • Jeremy,

    For the "No source available for "0x3fbd92"" message, please see the following post:

    http://e2e.ti.com/support/microcontrollers/c2000/f/171/p/656494/2412239#2412239

    All that is needed to display the source is to add the symbols, which is available in C2000Ware at:

    C:\ti\c2000\C2000Ware_<version>\libraries\boot_rom\f28004x\revB\rom_source

    As for the error when single-stepping 'Error: cannot load from non-primitive location', this might be because the debug info in the .lib is located on a different machine which was used to build it.  A few options are:

    1. Live with it and just “Locate File” every time it comes up

    2. Import the Driverlib project and rebuild the .lib so the paths will match your local machine

    3. Do what the Driverlib examples do and add the Driverlib source to your project but exclude it. This allows CCS to find the files, but you won’t get any build conflicts with the .lib.

    I hope this helps. If this answers your question, please click the green "Verified Answer" button. Thanks.

    - Ken

  • Ken,

    1. To display the source like you said, where do I add the symbols? I found the file path you told me in C2000 and added it to the project includes.
    2. More important, your second suggestion to resolve the 'Error: cannot load from non primitive location' did not work. I took the example from the driverlib, specifically spi_ex4_eeprom, and imported that into a clean CCS project. After making the necessary modifications, I am able to run my simple test program. I go step-by-step just to verify and I do not get stuck on the SysCtl_delay function call. Unfortunately, once I add the other files, I run into the same issue the first time SysCtl_delay is called. 

  • Jeremy,

    To load the symbols, you need to be In the CCS Debug view: Run -> Load -> Load Symbols...

    For the second item I will need to refer you back to someone working on the Driverlib.

    - Ken
  •  Thanks. But back to the symbols, what file extension am I looking to load into there? When I open the path you gave me, and then the rom_sources folder, they lead to more folders with lots of files.

  • Jeremy,

    Just to clarify, load program loads code to the target and symbols to the debugger. Load symbol loads symbols to the debugger and nothing to the target.

    At this point, you have already loaded your project (code) with the symbols. Now you just need to load the symbols for the Boot ROM. Find the .out file under \rom-sources\ccs_files\cpu\Release to load the symbols. I hope this helps.

    - Ken