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.

[参考译文] RTOS/TMDSEVM6678:在任务之间共享全局变量

Guru**** 2535150 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/760221/rtos-tmdsevm6678-sharing-global-variable-between-tasks

器件型号:TMDSEVM6678

工具/软件:TI-RTOS

您好!  

在另一个任务中引用时、难以使另一个任务中的全局变量集处于正确的值。  这与 e2e.ti.com/.../367224上的存档帖子类似。  

我尝试过使用静态和易失性关键字、但没有结果。  我正在尝试使用 UART 将文件发送到电路板进行处理、并在完成后返回给发起方。  

下面列出了有问题的代码。 在全局变量 g_UART_Handle 和 buffPointer 下面的代码中、跨任务保留其正确的值、但 outputData 不保留。  如果有任何帮助,将不胜感激。

/*
@file main.c
*
*创建日期:2019年1月3日
* 作者:Damian Oslebo
*
/

#include 
#include 
#include 
#include 

/* BIOS 头文件*/
#include 
#include 

#include "stdio.h"
#include "stdint.h"
#include "stdlib.h"
#include "string.h"

/* UART 头文件*/
#include 
#include 
#include 

/*我的标题*/
#include "Constants.h"
#include "RedundantWaveletTransform.h"

/*函数声明*/
typedef enum taskID{task_start、task_end、task_RWT}taskID;
void Board_initUART (void);
void UART_transfer_start (UARG 0、UARG arg1);
void ARarg0、UARG0 (void Rarg_RWT) UARg arg1);
void UART_transfer_end (UARg arg0、UARg arg1);
void queue_task (taskID);

// Constants *
/#define XMITTER_RDY 123

//全局变量*/
UART_Handle G_UART_Handle;
/*静态易失性*/字符 buffPointer[buffer_size << 2];
静态易失性浮点 outputData[NUM_STACTOR][buffer_size];

int main (void)
{
/*呼叫板初始化函数*/
Board_initUART();

queue_task (task_start);

/*启动 BIOS */
BIOS_start();
返回(0);
}//* main */

void queue_task (taskID)
{
Task_Handle 任务;
ERROR_Block EB;
Task_Params tskParams;

tskParams.priority = 1;

ERROR_INIT (&EB);
Task_Params_init (&tskParams);
switch (id)
{
案例 Task_start:
任务= Task_create (uart_transfer_start、&tskParams、&EB);
中断;
案例 Task_end:
任务= Task_create (uart_transfer_end、&tskParams、&EB);
中断;
案例 Task_RWT:
任务= Task_create (uart_transfer_end、&tskParams、&EB);
中断;
默认值:
中断;
}

if (task =NULL){
System_printf ("Task_create() failed!\n");
BIOS_exit (0);
}
}

void Board_initUART (void)
{
board_initCfg boardCfg;
UART_Params 参数;

boardCfg = Board_init_module_clock;

board_init (boardCfg);
UART_INIT();

UART_PARAMS_INIT (params);
params.baudrate = 115200;
params.writeDataMode = UART_DATA_BINARY;
params.readDataMode = UART_DATA_BINARY;
Params.readReturnMode = UART_return_full;
params.readEcho = UART_ECHO_OFF;
G_UART_Handle = UART_open (UART_Instance、params);
如果(!g_uart_handle){
System_printf ("UART 未打开");
}

}/* Board_initUART */


void UART_transfer_start (UARg arg0、UARg arg1)
{
char start_token = XMITTER_RDY;
int32_t databufferSize = buffer_size << 2;

memset (buffPointer、0、databufferSize);

UART_writePolling (g_UART_Handle、&start_token、1);

databasufferSize = UART_readPolling (g_UART_Handle、buffPointer、databasufferSize);

queue_task (task_RWT);
}/* UART_transfer_start */

void UART_transfer_end (UARg arg0、UARg arg1)
{
char start_token = XMITTER_RDY;
浮点值;
int32_t index、index2;

UART_writePolling (g_UART_Handle、&start_token、1);

/*此分配将起作用,因为在同一个任务中?
for (index = 0;index < buffer_size;index++)
{
outputData[0][index]= 3.2f;
}
*

for (index = 0;index < NUM_STOPENS;index++)
{
for (index2 = 0;index2 < buffer_size;index2++)
{
value = outputData[index][index2];
UART_writePolling (g_UART_Handle、&value、4);
}
}

// UART_TRANSFER_END */

void PERIT_RWT (UARg arg0、UARg arg1)
{
int32_t 索引;

for (index = 0;index < buffer_size;index++)
{
outputData[0][index]= 3.2f;
}
queue_task (task_end);
}//* perte_rWT */

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

    这是哪个处理器 SDK RTOS 版本?

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

    Yordan、

    使用  18年12月20日最新发布的 PROCESSOR-SDK-RTOS-C667x 05_02_00_10。

    谢谢、

    Damian Oslebo

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

    由于此线程与所讨论的 DSP 不直接相关、因此我在 TI 编译器专家中进行了循环以解释此行为。 还请提供编译时间标志和优化级别、供编译器团队分析。

    编译器 Champs、

    Processor SDK RTOS 5.02附带的 C6000编译器版本是 TI CGT8.2.2。 您能不能在编译时帮助解释一下这种行为

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

    我的编译器标志(编译器 TI v8.2.2)为:
    -mv6600 -Ooff --include_path="C:/Users/Damian oslebo/Desktop/DSP Code/RedundantY_Wavelet_Transform"--include_path="C:/ti/pdk_c667x_2_0_12/packages/ti/drv/uart --include_path="C:/ti/pdk_c667x_2_0_12/packages --include_path="C:/ti/ti-cgt-c6000_8.2.2/include --define=use_bios=v0 --suppress=dag=1037=suppress-diag-suppress=dag-suppress=dag-suppress=dag-dag-diag=dag=dag=1037=dag_suppress=dag-suppress=dag-suppress=dag-dag-dag=dag-dag=dag=dag-sup-dag=dag-sup-dag=dag=dag-dag=dag_sup-dag=dag=dag=dag=dag=dag=dag=dag-dag=dag-dag=dag=dag=

    尚未设置优化、但计划在代码开始工作到 O2/O3后打开。

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

    尊敬的 Damian:

    您是否仍在处理此问题? 您是否考虑 IPC 概念来保护全局数据?

    在下面的主题中、客户能够跨多个任务处理全局变量。

    谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我现在使用 #pragma DATA 段来共享全局数据、现在正在工作。 谢谢、这个线程可以关闭。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢您的更新。