FreeRTOS的Trace功能需要用这个解析。
M0, M0+是没有优先级分组的,所以要做个区分
[Lua] 纯文本查看 复制代码 NVIC_GROUP = {
"NVIC优先级分组 = 无分组 内核: ",
"NVIC优先级分组 = 无分组 内核: ",
"NVIC优先级分组 = Group4 内核: ",
"NVIC优先级分组 = Group3 内核: ",
"NVIC优先级分组 = Group2 内核: ",
"NVIC优先级分组 = Group1 内核: ",
"NVIC优先级分组 = Group0 内核: ",
}
function printf(...)
print(string.format(...))
end
function ReadCore(void)
local cpuid
local partno
local p
local patch
local rev
local group
local list =
{
{0xC60, "Cortex-M0+"},
{0xC20, "Cortex-M0"},
{0xC21, "Cortex-M1"},
{0xC23, "Cortex-M3"},
{0xC24, "Cortex-M4"},
{0xD22, "Cortex-M55"},
{0xD21, "Cortex-M33"},
{0xC27, "Cortex-M7"},
{0xD20, "Cortex-M23"},
{0xD23, "Cortex-M85"},
{0x132, "STAR-MC1"},
{0xFFF, "End"}, --结束标致行
};
cpuid = pg_read32(0xE000ED00)
partno = (cpuid >> 4) & 0xFFF
patch = cpuid & 0x0F
rev = (cpuid >> 20) & 0x0F
for i = 1, 255, 1 do
if (list[i][1] == 0xFFF) then
p = "Unknow"
break
end
if (list[i][1] == partno) then
p = list[i][2]
if((partno == 0xC60) or (partno == 0xC20)) then
group = 1
else
group = pg_read32(0xE000ED0C)
group = (group & 0x00000700) >> 8
end
p =NVIC_GROUP[group] .. p .. string.format(" r%dp%d", rev, patch)
break
end
end
return p
end
print(string.format("%s", ReadCore()))
|