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.

What is the ccsv6 version of rts430xl.lib

I have a project that was built on the early CCE V3 tools.  It used the rts430xl.lib.  I'm trying to build it with CCSv6.  The 4.4.3 compiler doesn't have this RTS anymore.  Of the 6 RTS's in the release, it is not clear what the differences are.  Where can I find info on how to translate the file naming convention?

What is rts430.lib vs rts430x.lib
What is the difference between rts430x.lib and rts430x_lc_rd.lib and rts430_lc_rd.eabi.lib?

What is the latest replacement for the early rts430xl.lib?

  • Michael LAvole said:
    What is rts430.lib vs rts430x.lib
    What is the difference between rts430x.lib and rts430x_lc_rd.lib and rts430_lc_rd.eabi.lib?

    Here is how to see the differences yourself.  Run the command ofd430 on one of the libraries, then look for the section that starts Build Attributes ...

    % ofd430 rts.lib | more
    ...
     Build Attributes in "$build.attributes"
    
        Format Version:  'A'
    
        <0>  Vendor Name:  "TI" (Texas Instruments, Inc.)
    
             Tag_File:
                Attributes:
                 Tag_Producer_Name       Assembler
                 Tag_Producer_VMajor     5          (Producer Major Version + 1)
                 Tag_Producer_VMinor     5          (Producer Minor Version + 1)
                 Tag_Producer_VPatch     5          (Producer Patch Version + 1)
                 Tag_Marked_Pro          1          (Marked as PRO tools)
                 Tag_ISA                 1          (MSP)
                 Tag_Code_Model          1          (small code)
                 Tag_Data_Model          1          (small data)
                 Tag_ABI                 1          (COFF ABI)
                 Tag_ABI_enum_size       3          (no enums that affect object file compatibility are used)
                 Tag_HW_MPY_ISR_INFO     1          (hw mpy interrupt safe)
                 Tag_HW_MPY_INLINE_INFO  1          (does not have hw mpy inlining)
    

    Compare this build attribute information from each library to see the differences between them.

    I don't think this method works with the very old libraries.  I think those libraries do not encode any build attributes in the file.

    Michael LAvole said:
    What is the latest replacement for the early rts430xl.lib?

    Instead of worrying about that, just let the tools choose the correct RTS library for you.  The details are discussed in the last paragraph of this wiki article.

    Thanks and regards,

    -George

  • There are two versions of the MSP430 CPU. The compiler calls them 430 and 430x. 430 is a 16-bit only processor, and 430x adds 20-bit addressing. If you were using a library named rts430x*.lib before, you will need to continue to use a library named with that pattern.
  • Thanks for the insight George.

    I need the equivalent rts430xl.lib because the linker-command file calls specific functions inside the library. 

    Answers that I don't have: Why did "they" choose this library?  Why did "they" call these functions?  What are the specifics of these functions?   My best guess is to find the current equivalent library.   (Unless someone can offer a better approach.)

  • Which specific functions are referred to in the linker command file? This is not typical practice.

    rt430xl.lib is "large code, large data, 430x, COFF," as indicated by the build attributes shown by ofd430. This library is not shipped with MSP430 compiler version 4.4.3, but the linker will build it automatically if you link against it directly or link against libc.a (recommended).

    Are you encountering build errors if you link against rts430xl.lib or libc.a?
  • Thanks
    The V4.4 CompilerUserGuide (6.10) seems to imply this, but it is a lot easier to understand after you spelled the 16bit vs 20bit difference. (I thought I was working w/ a 16bit device, now I'm not sure.)
  • What device are you working with? If it's a recent device, it's very likely to be a MSP430X
  • Thanks for the confirmation: I suspected the "L" in 430xl was large. (But large what, data, code or both?)
    I gather the LC in 430x_LC_RD means Large Code. (and Restricted Data?)

    The linker adds a pointer to the 430xl.lib <boot.obj> function. Why "they" did this? I don't know.
    The compiler wants to use libc.a but I'm forcing it to use the RTS430xl.lib, because the original code used it. (The safer approach is to reduce the number of unknowns.)

    Any comment on why the rts430xl.lib is no longer included? i.e. Is there some reason I should not use it?

    The code build fine when I use the rts430xl.lib from the v3.2.1 compiler.
    With "automatic" the compiler will use libc.a. Then there is the hard coded linker reference (mentioned above).
  • rts430xl.lib is no longer included by default, strictly to reduce the size of the download. You can still use it, and the linker will build it as needed.

    The "automatic" library selection option (--disable_auto_rts) is not directly related to the fact that the linker will automatically build missing libraries. If you explicitly link against rts430xl.lib, it should not matter whether you have set --disable_auto_rts.

    The linker command file syntax rts430xl.lib<boot.obj> refers to a section, not a function. It is telling the linker where to place that section. Perhaps your system needs the boot routine to be at a particular place in memory?

    Are you getting some sort of error when you attempt to build the project using MSP430 compiler version 4.4.3?
  • Until your comment I thought I was working with a 16bit MSP430 device.
    I was under the impression that "x" was a place holder. Like MSP430x4xx could be a MSP430F429. It appear you are suggesting there is also 20bit version: MSP430xF429?

    Is this wiki to old to talk about the MSP430x?
    en.wikipedia.org/.../File:MSP430_Part_Number_Decoder_2011.png
  • The 4.4.3 build fails because the linker can't find the rts430xl.lib file,.. Until I move the v3.2.1 copy to the 4.4.3 library location. If it were not for the rts430xl.lib linker statement the code would build fine if I use the "automatic" RTS selection.

    I'm not using the --disable_auto_rts flag. I'm setting the RTS at the build_settings: General tab.

    You refer to build it as needed. Do you really mean "build" or use? These libs are prebuilt, part of the compiler package install. As far as I'm know the rts430xl.lib is not being built.
  • If the project was formerly successfully linked using rts430xl.lib, then it must have been a 430X device, or you would have quickly run into problems.

    I don't think the X part of MSP430 vs. MSP430X shows up in the device number.  Instead, the hundreds digit reflects the CPU.  Please see en.wikipedia.org/.../TI_MSP430

    Yes, the x's in MSP430x4xx are placeholders and unrelated to MSP430X. Yes, this is confusing.

    Also see en.wikipedia.org/.../TI_MSP430

  • I really mean "build."  The linker will call "mklib" to build the library from source files in the library directory.

    Let's take a step back here, I think we've made a bunch of assumptions that may not be true.  

    1. Please show me the exact error message from your build console window, as well as the command line options.
    2. If you remove the "rts430xl<boot.obj>" line from your linker command file, does the build succeed?  If so, which library got picked?  Look at the linker map file (linker option --map_file)

  • I was moving a little too fast myself.  It appears the rts430xl.lib is being built.

    It was taking so long for the lib to build, it appeared that the build had crashed.  i.e. The build console stopped responding.

    Given enough time the lib does get built.  My projects are building fine now.

    Thanks for the build insight and device info.  The documentation make more sense now.