RISC-V interrupts

Hesham Almatary heshamelmatary at gmail.com
Sun Jun 11 19:38:19 UTC 2017


Hi Denis,

As per my previous reply, it is gonna be a challenge to make RTEMS
exes fit in 16 KiB of RAM, so it's a good idea to do some analysis on
the compressed ISA.

Cheers,
Hesham

On Sun, Jun 11, 2017 at 9:36 PM, Denis Obrezkov <denisobrezkov at gmail.com> wrote:
> I found out that there is 16 KiB of RAM. So, Freedom E310 chip has only 16
> KiB of RAM.
> And Freedeom E310 chip is based on E31 Coreplex core that allows maximum of
> 64 KiB of RAM.
> So, I was just a bit confused with these names at first.
>
> 2017-06-09 11:49 GMT+03:00 Hesham Almatary <heshamelmatary at gmail.com>:
>>
>> On Fri, Jun 9, 2017 at 9:09 AM, Denis Obrezkov <denisobrezkov at gmail.com>
>> wrote:
>> > 2017-06-09 1:52 GMT+03:00 Hesham Almatary <heshamelmatary at gmail.com>:
>> >>
>> >> Hi Denis,
>> >>
>> >> Does your board support any accesses to > 0x80000000. Note you still
>> >> use such region in your linker script, which shouldn't be used if your
>> >> board doesn't support it. I'd suggest your read about memory mapping
>> >> on your board and fix the linker script accordingly.
>> >>
>> >> Regards,
>> >> Hesham
>> >>
>> >> On Fri, Jun 9, 2017 at 8:38 AM, Denis Obrezkov
>> >> <denisobrezkov at gmail.com>
>> >> wrote:
>> >> > 2017-06-08 17:49 GMT+03:00 Denis Obrezkov <denisobrezkov at gmail.com>:
>> >> >>
>> >> >> 2017-06-08 12:24 GMT+03:00 Denis Obrezkov <denisobrezkov at gmail.com>:
>> >> >>>
>> >> >>> 2017-06-07 22:41 GMT+03:00 Hesham Almatary
>> >> >>> <heshamelmatary at gmail.com>:
>> >> >>>>
>> >> >>>> On Thu, Jun 8, 2017 at 2:26 AM, Denis Obrezkov
>> >> >>>> <denisobrezkov at gmail.com>
>> >> >>>> wrote:
>> >> >>>> > 2017-06-07 14:44 GMT+03:00 Sebastian Huber
>> >> >>>> > <sebastian.huber at embedded-brains.de>:
>> >> >>>> >>
>> >> >>>> >> On 06/06/17 18:58, Hesham Almatary wrote:
>> >> >>>> >>
>> >> >>>> >>> Originally RTEMS had a one big linkcmd for each platform,
>> >> >>>> >>> which
>> >> >>>> >>> defines linker symbols (used in C code) and required sections.
>> >> >>>> >>> This
>> >> >>>> >>> has been improved with current BSPs (like ARM-based ones), by
>> >> >>>> >>> splitting up shared linkcmd parts (linkcmd base) and BSP
>> >> >>>> >>> specific
>> >> >>>> >>> ones
>> >> >>>> >>> that include the shared one. riscv_generic, given that it's
>> >> >>>> >>> old,
>> >> >>>> >>> follows the old way of having a single big linkcmd. You can
>> >> >>>> >>> change
>> >> >>>> >>> this for your new BSP.
>> >> >>>> >>
>> >> >>>> >>
>> >> >>>> >> New ports/BSPs should definitely use a shared linkcmds.base
>> >> >>>> >> (see
>> >> >>>> >> ARM). Use
>> >> >>>> >> "riscv-rtems4.12-ld --verbose" to get the default linker
>> >> >>>> >> script.
>> >> >>>> >
>> >> >>>> > Ok.
>> >> >>>> >
>> >> >>>> > Now I have a problem:
>> >> >>>> >
>> >> >>>> >
>> >> >>>> >
>> >> >>>> > https://github.com/embeddedden/rtems-riscv/blob/hifive1/c/src/lib/libbsp/riscv32/hifive1/start/start.S#L117
>> >> >>>> > When I step to that line, gdb hangs with a message:
>> >> >>>> > (gdb) step
>> >> >>>> > Note: automatically using hardware breakpoints for read-only
>> >> >>>> > addresses.
>> >> >>>> >
>> >> >>>> How do you run/attach simulator (and which one do you use)? Do GDB
>> >> >>>> and
>> >> >>>> the simulator support 0x20400000 > addresses (where your text
>> >> >>>> section
>> >> >>>> is loaded to)? AFAIK, that's not the case. Spike's default machine
>> >> >>>> only works with addresses >= 0x80000000. You've to look up if
>> >> >>>> Spike,
>> >> >>>> Qemu [1] or GDB target sim model your board.
>> >> >>
>> >> >> I use openOCD from FreeStudio kit:
>> >> >>
>> >> >>
>> >> >>
>> >> >> https://github.com/sifive/freedom-e-sdk/blob/master/FreedomStudio/HiFive1/hello/openocd.cfg
>> >> >>
>> >> >> I was able to run code in ROM region, after I made this:
>> >> >>
>> >> >> MEMORY
>> >> >> {
>> >> >>     ROM      : ORIGIN = 0x20400000, LENGTH = 128M
>> >> >>     RAM      : ORIGIN = 0x80000000, LENGTH = 64K
>> >> >> }
>> >> >>
>> >> >> REGION_ALIAS ("REGION_VECTOR", RAM);
>> >> >> REGION_ALIAS ("REGION_START", ROM);
>> >> >> REGION_ALIAS ("REGION_TEXT", ROM);
>> >> >> REGION_ALIAS ("REGION_TEXT_LOAD", ROM);
>> >> >> REGION_ALIAS ("REGION_RODATA", ROM);
>> >> >> REGION_ALIAS ("REGION_RODATA_LOAD", ROM);
>> >> >> REGION_ALIAS ("REGION_DATA", RAM);
>> >> >> REGION_ALIAS ("REGION_DATA_LOAD", ROM);
>> >> >> REGION_ALIAS ("REGION_FAST_DATA", RAM);
>> >> >> REGION_ALIAS ("REGION_FAST_DATA_LOAD", ROM);
>> >> >> REGION_ALIAS ("REGION_BSS", RAM);
>> >> >> REGION_ALIAS ("REGION_WORK", RAM);
>> >> >> REGION_ALIAS ("REGION_STACK", RAM);
>> >> >>
>> >> >> And gdb can step till the "call boot_card" instruction,
>> >> >> but I can't proceed any further due to the error:
>> >> >> gdb hands after stepping into "call boot_card"
>> >> >> At the same time openocd shows:
>> >> >>
>> >> >> halted at 0x20400202 due to step
>> >> >> halted at 0x20400262 due to hardware trigger
>> >> >> halted at 0x204010c2 due to step
>> >> >>
>> >> >> The last line appears after attempt to make the step.
>> >> >> Links to my linkcmd and start.S files:
>> >> >>
>> >> >>
>> >> >>
>> >> >> https://github.com/embeddedden/rtems-riscv/blob/hifive1/c/src/lib/libbsp/riscv32/hifive1/startup/linkcmds
>> >> >>
>> >> >>
>> >> >>
>> >> >> https://github.com/embeddedden/rtems-riscv/blob/hifive1/c/src/lib/libbsp/riscv32/hifive1/start/start.S
>> >> >>
>> >> >>
>> >> >> Regards, Denis Obrezkov
>> >> >
>> >> >
>> >> > I also found out that when I use stepi on "call boot_card" I got a
>> >> > warning
>> >> > from openocd:
>> >> > Core got an exception (0xffffffff) while reading from 0x8000effc
>> >> >
>> >> > --
>> >> > Regards, Denis Obrezkov
>> >>
>> >>
>> >>
>> >> --
>> >> Hesham
>> >
>> > Yes, it definitely supports it, I've already done it.
>> > 0x80000000 is the start of 64 KiB RAM, and 0x20000000 is the start of
>> > flash.
>> >
>> > I think I found the problem. It seems that this gdb build supports 16
>> > KiB of
>> > RAM (as in Freedom E300 specification).
>> > I changed the value of RAM length to 16 KiB, so now I can execute
>> > further.
>> > Thanks!
>> >
>> Great! Glad to know it's working now. You might want to do some
>> analysis of the size/footprint of your executable (e.g. hello world),
>> and what should go into ROM vs RAM. 64 KiB might not be enough for
>> some applications. Also there is a "compressed" version of the RISC-V
>> ISA, might be worth looking at.
>>
>> >
>> >
>> > --
>> > Regards, Denis Obrezkov
>>
>>
>>
>> --
>> Hesham
>
>
>
>
> --
> Regards, Denis Obrezkov



-- 
Hesham



More information about the devel mailing list