Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NFC: green tea test for EEPROM driver #3

Closed

Conversation

paul-szczepanek-arm
Copy link
Collaborator

Description

Green tea test for EEPROM driver. Driver is required to provide the instance through a globally scoped function for test to build and run.

Pull request type

[ ] Fix
[ ] Refactor
[ ] New target
[x] Feature
[ ] Breaking change

Cruz Monrreal and others added 30 commits July 11, 2018 21:29
1. mbed_sdk_init is called before C++ global obj constructor in OS 5
2. Refine startup file with GCC_ARM toolchain related to this modification.
1. Update use of correct header files
2. Added missing entry of M2351 device in IAR defines.
3. Removed support of ARM toolchain in targets.json
…rity header file.

As per SAU documents, SAU is always present if the security extension is
available. The functionality differs if the SAU contains SAU regions.
If SAU regions are available it is configured with the macro __SAUREGION_PRESENT
Cruz Monrreal and others added 27 commits July 23, 2018 10:12
Add MTS Dragonfly bootloader back after accidental removal from pr ARMmbed#7131
…deepsleep

STM32: Improve GPIO IRQ edge detection when waking from deepsleep
Wiznet: fix us_ticker & gpio bug
RTOS SYSTIMER test error in TICKLESS mode
STM32L496: fix RAM size in ARM scatter file
Enable HAL Flash API on Fast Models MPS2 targets
Revise heap and stack size for Ethernet of GR-PEACH
…ve-DEVICE_EMAC

realtek rtl8195am remove DEVICE_EMAC
Allow legacy TCPServer::accept() to override inherited Socket::accept()
Made to prevent timeout if a single test case fails. The goal is that
each test case might wait only half of the remaining time reserved for
running TCP test cases.
With _sbrk being weak, we can override it directly rather than #if to support heap with
two-region model.
`handle_error` calls `MBED_CALLER_ADDR()`, but this is always a location from within platform/mbed_error.c. This is because `handle_error` is declared static. This does not cause the function to be inlined however. Instead, it is called by each function within mbed_error.c. For example, mbed_error yields this code:

```
000625c8 <mbed_error>:
   625c8:       b510            push    {r4, lr}
   625ca:       460c            mov     r4, r1
   625cc:       4611            mov     r1, r2
   625ce:       461a            mov     r2, r3
   625d0:       9b02            ldr     r3, [sp, #8]
   625d2:       f7ff feff       bl      623d4 <handle_error>
   625d6:       b968            cbnz    r0, 625f4 <mbed_error+0x2c>
   625d8:       4620            mov     r0, r4
   625da:       f7ff ff67       bl      624ac <print_error_report.constprop.0>
   625de:       f7ff fea8       bl      62332 <core_util_is_isr_active>
   625e2:       b910            cbnz    r0, 625ea <mbed_error+0x22>
   625e4:       f7ff fe9f       bl      62326 <core_util_are_interrupts_enabled>
   625e8:       b908            cbnz    r0, 625ee <mbed_error+0x26>
   625ea:       bf30            wfi
   625ec:       e7fd            b.n     625ea <mbed_error+0x22>
   625ee:       2001            movs    r0, #1
   625f0:       f000 f948       bl      62884 <__wrap_exit>
   625f4:       4800            ldr     r0, [pc, #0]    ; (625f8 <mbed_error+0x30>)
   625f6:       bd10            pop     {r4, pc}
   625f8:       80ff010f        .word   0x80ff010f
```

Note that at `625d2` there is a bl to handle error. That replaces the LR, which means that ALL calls to mbed_error will report a location of 0x625d6 or 0x625d7 (user vs. supervisor). I do not expect that this was the intention of the code. The simplest fix is to change line 99:

```C
static inline mbed_error_status_t handle_error(mbed_error_status_t error_status, unsigned int error_value, const char *filename, int line_number)
```

Since `handle_error()` will be inlined, the link register will be kept the same, so `MBED_CALLER_ADDR()` will yield the expected result. However, there is no guarantee that the compiler will respect the `inline` keyword in all circumstances.

The result is that each function that wishes to report its caller must extract its caller. This code cannot be centralised.

I have modified `mbed_error.c` to report the caller of each error reporting function, rather than the error reporting function itself.
Tools: Select compiler based on arch version
Makes Greentea TCP test cases to timeout less in connection errors
Tools: Generate update images with managed bl mode
…_sbrk

Nuvoton: Replace __wrap__sbrk with overriding _sbrk
Tools: Correct `win_to_unix` path handling
Make location meaningful in print_error_report
@donatieng
Copy link
Owner

Thanks Paul! Could you rebase your changes against the branch, otherwise it's pulling in a lot of unrelated commits?

donatieng pushed a commit that referenced this pull request Nov 19, 2018
Change driver initialization behavior:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.