gpt4 book ai didi

exception - 如何确定任务销毁的原因,VxWorks?

转载 作者:行者123 更新时间:2023-12-02 20:45:02 28 4
gpt4 key购买 nike

我有一个在 ARM uC 上运行的 VxWorks 应用程序。

首先让我总结一下应用;

应用程序由第三方堆栈和网关应用程序组成。我们实现了操作系统抽象层来支持操作系统独立性。

底层堆栈有自己的内存管理和控制设施,它将内存块保存在双向链表中。

例如;我们不直接执行 malloc/new 、 free/delege 。而是调用 OSA 层的例程,它从 OS 获取内存并将其放入列表中,然后将此内存返回给应用程序。(例程: XXAlloc 、 XXFree、XXReAlloc)

释放内存时我们再次使用 XXFree。

事实上这个 block 是一个结构体

-指示内存块开始和结束的魔数(Magic Number)- 用户请求分配的大小-由于前一个和下一个指针的对齐问题而导致实际大小- 指向返回给应用程序的内存块的指针。显示应用程序中调用 xxAlloc 的链接寄存器。

使用此 block 结构堆栈可以检查 block 是否损坏。

我们还有 pthread 库,它是从 Linux 移植来的-创建/终止线程(目前有22个线程)-同步对象(事件,互斥体..)

有一个由taskSpawn调用的主任务,后来这个任务创建了其他线程。

这是应用程序及其 VxWorks 接口(interface)的描述。

问题是:

其中一个任务突然被 VxWorks 破坏,没有给出任何错误信息。我还有一个 jtag 调试器,它会命中 VxWorks taskDestoy() 例程,但调用堆栈不会提供 PC 或 r14 的任何信息。

我对代码中的特定例程表示怀疑,其中完成了巨大的 xxAlloc 但出现了问题非常零星,没有任何线索表明我可以将其映射到源代码。

我认为操作系统会检测到异常并默默地执行其处理。

任何帮助都会很棒

问候

最佳答案

解决了。

我做了一个单独的测试。使用 malloc 和 memset 分配 20MB 0x55 并停止我的应用程序的线程。

我写了另一个线程来检查我的 20MB 是否写入了 0x55 以外的任何数据。

请问什么!!属于CPU中其他组件(其他人开发的)的其他一些线程写入我分配的空间。

谢谢4你的帮助

关于exception - 如何确定任务销毁的原因,VxWorks?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1187689/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com