~aleteoryx/muditaos

ref: cd700b7c16a4ab403f76c619ee60bf63ddbc55c8 muditaos/board/rt1051/crashdump/crashcatcher_impl.cpp -rw-r--r-- 1.9 KiB
cd700b7c — Przemyslaw Brudny Merge remote-tracking branch 'origin/stable' 4 years ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma GCC optimize("Og")

#include <CrashCatcher/CrashCatcher.h>

#include <log/log.hpp>
#include <date/date.h>
#include "crashdumpwriter.hpp"
#include "consoledump.hpp"

const CrashCatcherMemoryRegion *CrashCatcher_GetMemoryRegions(void)
{
    // board/rt1051/ldscripts/memory.ld
    static const CrashCatcherMemoryRegion regions[] = {
        // SRAM_OC
        {0x20200000, 0x20210000, CRASH_CATCHER_BYTE},
        // SRAM_DTC
        {0x20000000, 0x20070000, CRASH_CATCHER_BYTE},
    // intentionally skip text section
    // BOARD_SDRAM_HEAP
#if defined(HW_SDRAM_64_MB) && (HW_SDRAM_64_MB == 1)
        {0x80620000, 0x84000000, CRASH_CATCHER_BYTE},
#else
        {0x80620000, 0x81000000, CRASH_CATCHER_BYTE},
#endif
        // end tag
        {0xFFFFFFFF, 0xFFFFFFFF, CRASH_CATCHER_BYTE},
    };

    return regions;
}

void CrashCatcher_DumpStart(const CrashCatcherInfo *pInfo)
{
    crashdump::printCrashInfo(pInfo);
    crashdump::CrashDumpWriter::instance().openDump();
}

void CrashCatcher_DumpMemory(const void *pvMemory, CrashCatcherElementSizes elementSize, size_t elementCount)
{
    switch (elementSize) {
    case CRASH_CATCHER_BYTE:
        crashdump::CrashDumpWriter::instance().writeBytes(static_cast<const std::uint8_t *>(pvMemory), elementCount);
        break;
    case CRASH_CATCHER_HALFWORD:
        crashdump::CrashDumpWriter::instance().writeHalfWords(static_cast<const std::uint16_t *>(pvMemory),
                                                              elementCount);
        break;
    case CRASH_CATCHER_WORD:
        crashdump::CrashDumpWriter::instance().writeWords(static_cast<const std::uint32_t *>(pvMemory), elementCount);
        break;
    }
}

CrashCatcherReturnCodes CrashCatcher_DumpEnd(void)
{
    crashdump::CrashDumpWriter::instance().saveDump();
    abort();
    return CRASH_CATCHER_EXIT;
}