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.

[参考译文] 编译器/TMS320C28346:告诉编译器使用"extern "全局变量在另一个转换单元中使用数据阻止

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/878510/compiler-tms320c28346-tell-compiler-to-use-data-blocking-in-another-translation-unit-using-extern-global-variables

器件型号:TMS320C28346

工具/软件:TI C/C++编译器

我有文件 hello.c

/**
* hello.c
*/

#include "defs.h"

int main (void)
{
A = 1;
b = 1;
C = 1;

foo();
返回0;
} 
/**
* hello.c
*/

#include "defs.h"

int main (void)
{
A = 1;
b = 1;
C = 1;

foo();
返回0;
} 

我有 foo.c

/*
* foo.c
*
/
#include "defs.h"

#pragma SET_DATA_SECTION ("sect")
int a;
int b;
int c;
#pragma SET_DATA_SECTION ()

int foo ()
{
A++;
B++;
C++;

返回0;
} 

我有 defs.h

//*
defs.h
*
//

#ifndef Defs_H_
#define Defs_H_

int foo ();

extern int a;
extern int b;
extern int c;

#endif // 


foo.asm 中 foo.c 的汇编代码如下所示:

;*********
;* TMS320C2000 C/C++代码生成 PC v16.9.6.LTS *
;*创建日期/时间:2020年2月7日星期五10:07:33 *
;*********
compiler_opts --abi=coffabi --float_support=fpu32 --hl_source=on --mem_model:code=flat --mem_model:data=large --object_format=coff --silicon_version=28 --silic_debug:none
.svectXAR2、fp
.ti_appb_b_b
_b.usbt




@;"1000 b.csd1、1、d1、d1、tb:" ac2000.exe





;* FNAME:_foo FR 大小:0 *
;* *
;*函数环境 *
;* *
;*函数属性 *
;* 0参数、0 AUTO、0 SOE *
;*********

_foo:
MOVW DP、#_A ;[cpu_u]
公司 @_A ;[CPU_]|17|
公司 @ b ;[CPU_]|18|
公司 @μ_c ;[CPU_]|19|
MOVB AL、#0 ;[CPU_]|21|
LRETR ;[cpu_]
;返回发生;[]

和 hello.asm 中

;*********
;* TMS320C2000 C/C++代码生成 PC v16.9.6.LTS *
;*创建日期/时间:2020年2月7日星期五10:07:33 *
;*********
compiler_opts --abi=coffabi --float_support=fpu32 --hl_source=on --mem_model:code=flat --mem_model:data=large --object_format=coff --silicon_version=28 --symTemp debug:none
.ev.evmXAR2、fp
;C:\bti_model\cme.tidc2000-reb6b6b.textb.cc6bdle\@ac2000.exe





;* FNAME:_MAIN FR 大小:0 *
;* *
;*函数环境 *
;* *
;*函数属性 *
;* 0参数、0 AUTO、0 SOE *
;*********

主函数(_M):
MOVW DP、#_A ;[cpu_u]
MOVB @_A、#1、UNC ;[CPU_]|15|
MOVW dp、#_b ;[cpu_u]
MOVB μ@ b、#1、UNC ;[CPU_]|16|
MOVW DP、#_c ;[cpu_u]
MOVB @μ_c、#1、UNC ;[CPU_]|17|
LCR #_foo ;[CPU_]|19|
;调用发生[#_foo];[]|19|
MOVB AL、#0 ;[CPU_]|23|
LRETR ;[cpu_]
;发生返回;[];*********

;*未定义的外部引用 *
;********
全局_b
.global_c
.global_a
.global_foo

我的问题是如何让编译器在 hello.c 中同时使用 DATA_Blocking 和外部变量、以便编译器执行 DP 优化?

我知道我可以创建一个结构、但我需要实际变量、因为我需要.map 文件中每个变量的地址。

谢谢。

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

    使用编译器选项--opt_level=4。  这使编译器能够跨文件进行优化。  反过来、这使编译器能够看到所有这些变量都位于同一数据页上、即使在不定义这些变量的源文件中也是如此。

    谢谢、此致、

    乔治