This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28.0039万C:FreeRTOS交换上下文

Guru**** 2347070 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1102942/tms320f280039c-freertos-switching-context

部件号:TMS320F28.0039万C

大家好。

我已经成功地在  新型TMS320F28.0039万c上从该存储库( github.com/.../freertos_c28x )调整FreeRTOS并使其正常工作。 但它只适用于一个任务,当我添加第二个任务时,它不起作用。  当系统进入第二个指令时 ,它会被冻结,它会尝试执行无效的指令。 只有一个任务在运行时,系统工作正常,即使是队列和延迟也是如此。 我比较了这两个版本的地图,有很多不同方向的函数。 可能是 对pxPortInitializeStack()所做的一些假设不适用于新的EABI。 当您有第二个任务时,它使用TickISR函数内的代码输入该函数,但第一个任务使用portRestore First上下文输入。 代码已附加

我非常感谢您提供的任何帮助。

此致

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters )
{
volatile uint16_t i;
base = 0;
pxTopOfStack[base++] = 0x0080; // ST0. PSM = 0(No shift)
pxTopOfStack[base++] = 0x0000; // T
pxTopOfStack[base++] = 0x0000; // AL
pxTopOfStack[base++] = 0x0000; // AH
pxTopOfStack[base++] = 0xFFFF; // PL
pxTopOfStack[base++] = 0xFFFF; // PH
pxTopOfStack[base++] = 0xFFFF; // AR0
pxTopOfStack[base++] = 0xFFFF; // AR1
pxTopOfStack[base++] = 0x8A08; // ST1
pxTopOfStack[base++] = 0x0000; // DP
pxTopOfStack[base++] = 0x2000 | IER; // IER at the moment of creating tasks, make sure INT14 is enabled
pxTopOfStack[base++] = 0x0000; // DBGSTAT
pxTopOfStack[base++] = ((uint32_t)pxCode) & 0xFFFFU; // PCL
pxTopOfStack[base++] = ((uint32_t)pxCode >> 16) & 0x00FFU; // PCH
pxTopOfStack[base++] = 0xAAAA; // Alignment
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    您是否在项目中使用动态分配? 请检查所有任务的任务堆栈是否分配给有效的内存部分。

    谢谢
    Vasudha