0

我有一个程序可以使用 Boneh-Franklin 加密对文本进行加密和解密。这在 PC 上效果很好,但由于某种原因导致 ESP32 不断重启,并出现以下错误消息:

setup2
setup2.2
setup2.3
Guru Meditation Error: Core  1 panic'ed (Unhandled debug exception)
Debug exception reason: Stack canary watchpoint triggered (loopTask) 
Core 1 register dump:
PC      : 0x40083774  PS      : 0x00060b36  A0      : 0x3ffb0120  A1      : 0x3ffb0060  
A2      : 0x68efa751  A3      : 0x3ffb0938  A4      : 0x3ffb0720  A5      : 0xfb879c5c  
A6      : 0x61b36b71  A7      : 0x0006970f  A8      : 0x01709af4  A9      : 0x01709af4  
A10     : 0xfaa5dfed  A11     : 0x01a3ff3b  A12     : 0x76651dec  A13     : 0x00000001  
A14     : 0x00000000  A15     : 0x04adbe74  SAR     : 0x0000001e  EXCCAUSE: 0x00000001  
EXCVADDR: 0x00000000  LBEG    : 0x400f1cc5  LEND    : 0x400f1cc9  LCOUNT  : 0x00000000  

ELF file SHA256: 0000000000000000

我使用的是 Arduino ESP32 环境,在 main.cpp 中 CONFIG_ARDUINO_LOOP_STACK_SIZE 设置为 8192,8k 堆栈应该足以运行它。它在 PC 上完美运行,为什么不在 ESP32 上对我来说是个谜。任何人都可以帮忙吗?我完全没有想法。对于 Boneh-Franklin 实现,我使用了这个库:https ://github.com/miracl/core 我自己的代码大约 200 行,我已经将它上传到 Google Drive:https ://drive.google.com/file/ d/1EY0mGC2UiVNhE68b5Q0VB9JIY2Owbpxg/view?usp=sharing

4

2 回答 2

1

查看代码,堆栈需要超过 8192 个字节并不是不合理的,因为在堆栈上分配了很多大对象,无论是在您的代码中还是在库中,例如:

环形()

  • csprng RNG– 128 字节
  • ECP2 pPublic– 264 字节
  • ECP2 cipherPointU– 264 字节
  • ECP privateKey– 132 字节

加密(...)

  • ECP pointQId– 132 字节
  • char[] dst– 256 字节
  • BIG l– 40 字节
  • FP12 theta– 532 字节

PAIR_fexp()

  • FP2 X– 88 字节
  • BIG x– 40 字节
  • FP a, b– 2 * 44 = 88 字节
  • FP12 t0, y0, y1, y2, y3– 5 * 532 = 2660 字节

增加你的筹码量。它可能会有所帮助。

于 2021-05-16T17:41:09.170 回答
0

我通过谷歌搜索自己的麻烦来到了这个页面,所以我想我会在这里添加我的解决方案

我最近遇到了这个错误,通过使用一系列Serial.println's 能够追踪到代码中创建的无限循环

于 2022-02-21T12:33:51.620 回答