RISC-V/HiFive memory limitations

Denis Obrezkov denisobrezkov at gmail.com
Mon Jun 19 21:03:32 UTC 2017


2017-06-19 23:57 GMT+03:00 Hesham Almatary <heshamelmatary at gmail.com>:

> Hi Denis,
>
> If you cscope this symbol you'll end up with the following:
>
> /**
>>  * By default, use the minimum stack size requested by this port.
>>  */
>> #ifndef CONFIGURE_MINIMUM_TASK_STACK_SIZE
>>   #define CONFIGURE_MINIMUM_TASK_STACK_SIZE CPU_STACK_MINIMUM_SIZE
>> #endif
>>
>
> This means if you, from the application (i.e. hello or ticker), didn't
> define CONFIGURE_MINIMUM_TASK_STACK_SIZE it will be
> CPU_STACK_MINIMUM_SIZE which is 4KiB for riscv32 CPU
> (cpukit/score/cpu/riscv32/rtems/score/cpu.h:457)
>
>
> On Mon, Jun 19, 2017 at 10:07 AM, Denis Obrezkov <denisobrezkov at gmail.com>
> wrote:
> > Hesham, could you check what is the value of rtems_minimum_stack_size in
> > your SPIKE executable?
> >
> > 2017-06-18 22:10 GMT+03:00 Denis Obrezkov <denisobrezkov at gmail.com>:
> >>
> >> Hello all,
> >>
> >> I was able to proceed further via setting rtems_minimum_stack_size
> >> manually to 0x200.
> >> Now I have another error, my backtrace:
> >> #0  0x20403728 in _Internal_error
> >> (core_error=INTERNAL_ERROR_WORKSPACE_ALLOCATION)
> >>     at
> >> /home/reprofy/Projects/riscv/rtems/development/rtems/
> kernel/rtems-riscv/c/src/../../cpukit/score/src/interr.c:44
> >> #1  0x2040ec40 in _Workspace_Allocate_or_fatal_error (size=2976696) at
> >> /home/reprofy/Projects/riscv/rtems/development/rtems/
> kernel/rtems-riscv/c/src/../../cpukit/score/src/wkspace.c:163
> >> #2  0x2040f0e6 in _Freechain_Initialize (freechain=0x80000c3c
> >> <_RTEMS_tasks_Information+60>, allocator=0x2040ec16
> >> <_Workspace_Allocate_or_fatal_error>, number_nodes=41343, node_size=72)
> >>     at
> >> /home/reprofy/Projects/riscv/rtems/development/rtems/
> kernel/rtems-riscv/c/src/../../cpukit/score/src/freechain.c:31
> >> #3  0x20409346 in _Thread_Initialize_information (information=0x80000c00
> >> <_RTEMS_tasks_Information>, the_api=OBJECTS_CLASSIC_API, the_class=1,
> >> maximum=3908149631, is_string=false,
> >>     maximum_name_length=4) at
> >> /home/reprofy/Projects/riscv/rtems/development/rtems/
> kernel/rtems-riscv/c/src/../../cpukit/score/src/thread.c:68
> >> #4  0x20401dac in _RTEMS_tasks_Manager_initialization () at
> >> /home/reprofy/Projects/riscv/rtems/development/rtems/
> kernel/rtems-riscv/c/src/../../cpukit/rtems/src/tasks.c:72
> >> #5  0x204021bc in rtems_initialize_executive () at
> >> /home/reprofy/Projects/riscv/rtems/development/rtems/
> kernel/rtems-riscv/c/src/../../cpukit/sapi/src/exinit.c:95
> >> #6  0x2040031c in boot_card (cmdline=0x0) at
> >> /home/reprofy/Projects/riscv/rtems/development/rtems/
> kernel/rtems-riscv/c/src/lib/libbsp/riscv32/hifive1/../../
> shared/bootcard.c:76
> >> #7  0xffffcd98 in ?? ()
> >>
> >> Is RTEMS trying to allocate 2976696 bytes?
> >> It seems to me, that .data region is not properly initialized. What do
> you
> >> think about this?
> >>
> >> 2017-06-18 1:31 GMT+03:00 Denis Obrezkov <denisobrezkov at gmail.com>:
> >>>
> >>> 2017-06-17 22:11 GMT+03:00 Denis Obrezkov <denisobrezkov at gmail.com>:
> >>>>>>
> >>>>>>
> >>>>> Can you run RTEMS hello world? Or does printf make that too large? If
> >>>>> that is
> >>>>> too large, you need to force the tests to switch to printk(). There
> is
> >>>>> some magic
> >>>>> in testsuites/configure.ac for that.
> >>>>>
> >>>>> The low ticker examples (especially the last one) will show configure
> >>>>> options
> >>>>> to cut memory use.
> >>>>>
> >>>>> But these are hacks on individual tests. If there is a simulator
> which
> >>>>> has interrupts,
> >>>>> I would be testing on it since you will be battling the architecture
> >>>>> not a RAM limit.
> >>>>> Your project is the port not to put RTEMS into a tiny memory space.
> :)
> >>>>>
> >>>>> --joel
> >>>>>
> >>>>>>
> >>>>>> --
> >>>>>> Regards, Denis Obrezkov
> >>>>>
> >>>>>
> >>>> I was able to run the low ticker example further than in my earlier
> >>>> attempts.
> >>>>
> >>>> But now I have a problem with it:
> >>>> #0  memset (m=0xb98a0641, c=0, n=102) at
> >>>> ../../../../../gcc-7.1.0/newlib/libc/string/memset.c:62
> >>>> #1  0x20403168 in _Heap_Initialize (heap=0xb98a0641,
> >>>> heap_area_begin_ptr=0x80002456, heap_area_size=7082, page_size=8)
> >>>>     at
> >>>> /home/reprofy/Projects/riscv/rtems/development/rtems/
> kernel/rtems-riscv/c/src/../../cpukit/score/src/heap.c:230
> >>>> #2  0x20400954 in RTEMS_Malloc_Initialize (areas=0x80003f78,
> >>>> area_count=1, extend=0x0)
> >>>>     at
> >>>> /home/reprofy/Projects/riscv/rtems/development/rtems/
> kernel/rtems-riscv/c/src/../../cpukit/libcsupport/src/
> malloc_initialize.c:40
> >>>> #3  0x20400378 in bsp_work_area_initialize_default
> >>>> (area_begin=0x80000e10, area_size=12784) at
> >>>> ../../../../../.././hifive1/lib/include/bsp/bootcard.h:158
> >>>> #4  0x204003c0 in bsp_work_area_initialize () at
> >>>> /home/reprofy/Projects/riscv/rtems/development/rtems/
> kernel/rtems-riscv/c/src/lib/libbsp/riscv32/hifive1/../../
> shared/bspgetworkarea.c:61
> >>>> #5  0x204021bc in rtems_initialize_executive () at
> >>>> /home/reprofy/Projects/riscv/rtems/development/rtems/
> kernel/rtems-riscv/c/src/../../cpukit/sapi/src/exinit.c:95
> >>>> #6  0x2040031c in boot_card (cmdline=0x0) at
> >>>> /home/reprofy/Projects/riscv/rtems/development/rtems/
> kernel/rtems-riscv/c/src/lib/libbsp/riscv32/hifive1/../../
> shared/bootcard.c:76
> >>>> #7  0x20400064 in _end_clear_bss () at
> >>>> /home/reprofy/Projects/riscv/rtems/development/rtems/
> kernel/rtems-riscv/c/src/lib/libbsp/riscv32/hifive1/start/start.S:116
> >>>>
> >>>> I want to figure out, why it wants to use memset on these addresses,
> >>>> because 0x80004000 is the maximum available address.
> >>>>
> >>>>
> >>>> --
> >>>> Regards, Denis Obrezkov
> >>>
> >>>
> >>> I was able to proceed further after adding
> >>> #define CONFIGURE_UNIFIED_WORK_AREAS
> >>> to init.c of low_ticker example.
> >>> Now I get an error:
> >>> #0  0x2040d940 in _Chain_Initialize_node (the_node=0x80003ec0) at
> >>> ../../cpukit/../../../hifive1/lib/include/rtems/score/chainimpl.h:127
> >>> #1  0x2040da82 in _Chain_Iterator_initialize (the_chain=0x80000320
> >>> <_User_extensions_List>, the_registry=0x8000032c
> <_User_extensions_List+12>,
> >>> the_iterator=0x80003ec0,
> >>>     direction=CHAIN_ITERATOR_FORWARD) at
> >>> ../../cpukit/../../../hifive1/lib/include/rtems/score/chainimpl.h:1049
> >>> #2  0x2040de90 in _User_extensions_Iterate (arg=0x80003f18,
> >>> visitor=0x2040dd48 <_User_extensions_Fatal_visitor>,
> >>> direction=CHAIN_ITERATOR_FORWARD)
> >>>     at
> >>> /home/reprofy/Projects/riscv/rtems/development/rtems/
> kernel/rtems-riscv/c/src/../../cpukit/score/src/userextiterate.c:174
> >>> #3  0x204036c4 in _User_extensions_Fatal (source=INTERNAL_ERROR_CORE,
> >>> error=4) at
> >>> ../../cpukit/../../../hifive1/lib/include/rtems/score/
> userextimpl.h:307
> >>> #4  0x204036e8 in _Terminate (the_source=INTERNAL_ERROR_CORE,
> >>> the_error=4) at
> >>> /home/reprofy/Projects/riscv/rtems/development/rtems/
> kernel/rtems-riscv/c/src/../../cpukit/score/src/interr.c:35
> >>> #5  0x20403730 in _Internal_error
> >>> (core_error=INTERNAL_ERROR_INTERRUPT_STACK_TOO_SMALL)
> >>>     at
> >>> /home/reprofy/Projects/riscv/rtems/development/rtems/
> kernel/rtems-riscv/c/src/../../cpukit/score/src/interr.c:44
> >>> #6  0x20403824 in _ISR_Handler_initialization () at
> >>> /home/reprofy/Projects/riscv/rtems/development/rtems/
> kernel/rtems-riscv/c/src/../../cpukit/score/src/isr.c:51
> >>> #7  0x20402170 in rtems_initialize_data_structures () at
> >>> /home/reprofy/Projects/riscv/rtems/development/rtems/
> kernel/rtems-riscv/c/src/../../cpukit/sapi/src/exinit.c:82
> >>> #8  0x204021bc in rtems_initialize_executive () at
> >>> /home/reprofy/Projects/riscv/rtems/development/rtems/
> kernel/rtems-riscv/c/src/../../cpukit/sapi/src/exinit.c:95
> >>> #9  0x2040031c in boot_card (cmdline=0x0) at
> >>> /home/reprofy/Projects/riscv/rtems/development/rtems/
> kernel/rtems-riscv/c/src/lib/libbsp/riscv32/hifive1/../../
> shared/bootcard.c:76
> >>> #10 0xffffcd98 in ?? ()
> >>>
> >>> And I found out that rtems_minimum_stack_size variable is 0xab817bb3.
> >>> And I don't know why - in the low ticker example it is set to 512.
> >>>
> >>> --
> >>> Regards, Denis Obrezkov
> >>
> >>
> >>
> >>
> >> --
> >> Regards, Denis Obrezkov
> >
> >
> >
> >
> > --
> > Regards, Denis Obrezkov
>
>
>
> --
> Hesham
>

Yes, I have configured it in application.
Anyway, the number 0xab817bb3 is not for 4 KiB.

-- 
Regards, Denis Obrezkov
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20170620/31aef33d/attachment-0002.html>


More information about the devel mailing list