如题,官方似乎没有公布性能测试数据。目前想用低压中断切换电源,需求在100us内完成,主频任意(目前是60M)。
问题如下:
主频高于20M时,每秒平均能够执行多少指令(最好能知道RAM和Flash的数据)?即MIPS。
低精度低压监控模块的采样间隔如何?延迟多少才能触发中断?
中断嵌套如何配置?中断优先级最高位是0更高吗?
BTW,测试时发现,前移栈尾地址(即_eusrstack)后,将数据存放至RAM尾部2K区域,会导致异常复位,显示原因是RPOR,这是怎么回事?
如题,官方似乎没有公布性能测试数据。目前想用低压中断切换电源,需求在100us内完成,主频任意(目前是60M)。
问题如下:
主频高于20M时,每秒平均能够执行多少指令(最好能知道RAM和Flash的数据)?即MIPS。
低精度低压监控模块的采样间隔如何?延迟多少才能触发中断?
中断嵌套如何配置?中断优先级最高位是0更高吗?
BTW,测试时发现,前移栈尾地址(即_eusrstack)后,将数据存放至RAM尾部2K区域,会导致异常复位,显示原因是RPOR,这是怎么回事?
您好,关于您的三个问题以及遇到的一个异常现象:
①ram中的代码是一个clk执行一个单周期指令;flash中的代码是8个clk执行一个单周期指令。在一般代码中ram和flash的clk配置为同样的,clk可以视作主频。
②低压监控模块是一直在监控的,触发到阈值就直接进中断,可以满足100us的需求。
③支持2级中断嵌套,即只能抢占1次。用PFIC_SetPriority()函数可以配置,最高位表示抢占优先级位,为0优先级更高。
④异常复位时,可能是进了硬件错误中断,可以参考下篇博客,跟踪一下代码运行情况。CH57x/CH58x/CH32V wch risc-v 芯片hardfault问题追踪&程序卡死追踪 - iot-fan - 博客园 (cnblogs.com)
找到了出问题的函数,是库里面的ggs_ReadAttrCB(),
00007f46:
ggs_ReadAttrCB():
? ? 7f46: 452d? ? ? ? ? ? ? ? li a0,11 --> Here
? ? 7f48: 14071763? ? ? ? ? bnez a4,8096+0x150>
? ? 7f4c: 0005c803? ? ? ? ? lbu a6,0(a1)
? ? 7f50:4709? ? ? ? ? ? ? ? lia4,2
指示出错原因是00000002,mtval为0。
这明明是有效指令啊,怎么会HArdFault呢?望解答。
Edit:经过排查,似乎是栈尾地址与数据重叠导致。多留出4Byte,故障消失。
但是原始栈地址也是RAM尾部,按理来说不会写入,并不会发生这样的问题,到底是怎么回事呢?和全局指针(gp)是否有关?
另外还有一个问题,TMOS和GAP的alloc是在定义的内存数组中分配吗?还是有利用到标准的alloc动态分配?
排查一下是不是某个函数的taskID传参传错了,调用到了协议栈内部的taskID,会导致不可预计的错误。编译完代码,573的18kram剩余的部分会提供给局部变量和堆栈使用,注意使用标准库的内存分配注意不要占用太多的空间,如果申请超出了ram剩余的量,挤占到了协议栈内的堆栈,也可能导致硬件错误。
tmos的内存分配是占用了BLE_MEMHEAP_SIZE这个宏配置的预留给协议栈的ram,没有用到标准库的内存分配。建议使用tmos的内存分配,在协议栈的监管下不会导致堆栈溢出。
已解决,是3.40 版本ISP软件错误烧写所致,链接脚本加NOLOAD解决。