Tool News
 
 
 

Tool News

Products Info
Downloads
Tools FAQs
MESC TOOL NEWS: MESCT-MR32R-001216D

MR32R
Precaution

Please take note of the following problems in using real-time OS MR32R for the M32R family MCUs:
  • On defining stack_section
  • On using the timer template for the M32102 group MCUs
  • On using system calls "chg_pri" and "ichg_pri"


  1. Problem on Defining stack_section
    1.1 Versions Concerned
    MR32R V.3.00 Release 1 -- V.3.20 Release 1

    1.2 Description
    When stack_section for defining tasks in the configuration file is defined, the symbol indicating the base address of the stack area for the task may not properly be produced. As a result, either of two symptoms shown below appears.
    (1) If the following three conditions are met, a compilation error occurs:
    (a) MR32R V.3.00 Release 1 or later is used.
    (b) In the configuration file, stack_section is defined.
    (c) CC32R is running and option "-R" for passing arguments to a function by using registers is used.
    (2) If the following two conditions are met, the program may not properly be executed because stacks are placed at incorrect areas:
    (a) MR32R V.3.20 Release 1 is used.
    (b) In the configuration file, stack_section is defined.

    1.3 Workaround
    Define stack_area instead of stack_section because the former has the function identical to the latter. However, when defining stack_area, care must be exercised as described below.
    • If there are three or more stack_areas, define each of them as either "__MR_INT" or "__MR_EXT".

    Example 1: Modified
    The stacks for the main() and task1() tasks are combined and the single stack_area is defined as "__MR_INT".
    Note: The stack for each task is placed at the INT_USR_STACK or EXT_USR_STACK section by defining stack_area as __MR_INT or __MR_EXT respectively.
    Every section can be located anywhere within the beginning 16-Mbyte memory space.
    ---------------------------------------------------------
         task[1]{
             entry_address    = main();
             stack_size       = 0x1000;
             stack_area       = __MR_INT;
             priority         = 1;
             initial_start    = ON;
         };
         task[2]{
             entry_address    = task1();
             stack_size       = 0x1000;
             stack_area       = __MR_INT;
             priority         = 2;
         };
         task[3]{
             entry_address    = task2();
             stack_size       = 0x1000;
             stack_area       = __MR_EXT;
             priority         = 3;
         };
    ---------------------------------------------------------
    Example 2: Original
    ---------------------------------------------------------
         task[1]{
             entry_address    = main();
             stack_size       = 0x1000;
             stack_section    = RAM1;
             priority         = 1;
             initial_start    = ON;
         };
         task[2]{
             entry_address    = task1();
             stack_size       = 0x1000;
             stack_section    = RAM2;
             priority         = 2;
         };
         task[3]{
             entry_address    = task2();
             stack_size       = 0x1000;
             stack_section    = RAM3;
             priority         = 3;
         };
    ---------------------------------------------------------
    1.4 Schedule of Fixing Problem
    This problem has already been fixed in MR32R V.3.30 Release 1

  2. Problem on Using the Timer Template for the M32102 Group MCUs
    2.1 Version Concerned
    MR32R V.3.20 Release 1

    2.2 Description
    The timer of the M32102 group MCUs cannot be properly initialized even if timer template "m32102.tpl" is used.

    2.3 Conditions
    This problem occurs if the following two conditions are satisfied:
    (1) Either of the cross-tools described below is used.
    (a) TW32R V.2.00 Release 1 or later
    (b) D-CC/M32R 4.3f
    (2) Timer template "m32102.tpl" is used.

    2.4 Workaround
    Describe how to set the initial values of the timer, save the values of interrupt mask, and perform the return process in place of using the "m32102.tpl" timer template.
    For these descriptions, refer to Section 7.1, "Automatic Setting of Timers" in MR32R User's Manual.

    2.5 Schedule of Fixing Problem
    This problem has already been fixed in MR32R V.3.30 Release 1.

  3. Problem on Using System Calls "chg_pri" and "ichg_pri"
    3.1 Version Concerned
    MR32R V.3.20 Release 1

    3.2 Description
    When system call "chg_pri" or "ichg_pri" is issued, a write to an indeterminate address occurs, which may result in improper operations.

    3.3 Conditions
    This problem occurs if the "chg_pri" or "ichg_pri" system call is issued for the task that is in any one or more of the following states;
    • The waiting state generated by dly_tsk, tslp_tsk, or slp_tsk
    • Waiting for an event flag
    • Waiting for an message or semaphore
    • Waiting for the transmission of a message buffer
    • Waiting for the reception of a message buffer
    • Waiting for the acceptance of a rendezvous
    • Waiting for the call of a rendezvous
    • Waiting for the end of a rendezvous
    • Waiting for gaining a fixed-length memory pool
    • Waiting for gaining a variable-length memory pool

    • 3.4 Workaround
      Use MR32R V.3.30 Release 1.

      3.5 Schedule of Fixing Problem
      This problem has already been fixed in MR32R V.3.30 Release 1.




    © 2008. Renesas Technology Corp., All rights reserved. Privacy | Legal