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.

[参考译文] 编译器/MSP432P4111:变量地址的常量指针-潜在问题

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/922052/compiler-msp432p4111-constant-pointers-to-variable-addresses---potential-issue

器件型号:MSP432P4111

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

您好!

工具:

MSP432P4111

CCS 10.1.0.00010

TI ARM V20.2.1.LTS

概述:


我有一种设计为常量的结构(在程序存储器中)、这样我可以通过结构组进行迭代、并根据局部变量的地址确定局部变量的值、以便通过数据包网络对该变量和变量组进行流式传输。

我有一个项目条目:

/**用于定义变量的单个项目条目*/
typedef struct
{/**

用户希望实现的变量类型*/
TE_RVAR_variableType 可变类型;

/**用户将其设置为其项目所独有的枚举用户类型*/
LUint32 u32UserType;

/**指向变量地址的指针*/
void *vpData;

}TS_RVAR_item_entry; 

然后、我有几组项目:

/**可在数组中使用的变量组*/
typedef 结构
{/**

指向当前组的变量项数组的指针。 //
const TS_RVAR_ITEM_Entry *tsEntryArray;

}TS_RVAR_PARAM_GROUP; 

实施:


我创建一个变量项的常量结构、例如:

// LTE
const TS_RVAR_ITEM_Entry tsRVAR_GROUP_0[]=
{

.eVariableType = RVAR_TYPE_U8、
.u32UserType = AX_RVAR_USER_LTTE_STAT_STATEMACHVAR、
.vpData =(void *) sSARA.em_END_









={_ANT_AFR_END_= 0.32_END_={_END_=.UST_ANT_ANT_ANT_END_ ANT_ANT_ANT_END_ ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_ANT_





// WiFi
const TS_RVAR_ITEM_Entry tsRVAR_GROUP_1[]=
{

.eVariableType = RVAR_TYPE_U32、
.u32UserType = AX_RVAR_USER_WIFI_MAIN_STATEMACHINE、
.vpData =(void *)&sCC3XUserType = AX_ENTR_END_



、{.ipt_ENT_V64_ENTR_END_、{=.xr&s_ENTR_END_ 64_END_、{&s_ENTREST_}{&}{&}{&}{&}{&}{&}{&}{&}{Var_IP_ENTRUST_}{&}{Var_ENT_}{&}{&}{&}{&}{&&}{&&}{Var_}{&&}{Var_}{&&}{&&}{&&}{&&}{&








然后创建一个我的应用程序迭代的整体组:

const TS_RVAR_PARAM_GROUP tsRVAR_ITEMS [C_LOCALDEF_LCCM1133__NUM_GROUS]=
{
//组0 - LTE */
&tsRVAR_GROU_0[0]、

//组1 - wifi */
&tsRVAR_GROU_1_[0]、

};

结果:

随机地、编译器似乎不会插入变量的正确地址。 随机表示变量的某些地址是正确的、有些地址是错误的。 在我看来、编译器似乎不知道结构中的一个象 Estate 这样的变量只有一个字节、我认为它假定它是4个字节。 或者、它可能需要一些对齐。

例如、在组1中、项目0我指向位于 RAM 中0x200355C3的状态机变量的地址

但是、编译器会将错误的地址 ox 0x2003559B 插入到程序存储器中的常量指针中。 地址甚至不会关闭0xC3 v 的0x9B。

想知道是否有人可以看到我的代码有任何明显的错误、或者这是否是编译器中的异常?

我已经完全擦除了器件、清理了项目并创建了一个新的工作区、结果没有任何变化。

谢谢

太棒了!

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

    对于发生这种情况的源文件...

    [引用 user="vingp">编译器会将错误的地址 ox 0x2003559B 插入程序存储器中的常量指针。 地址甚至不会关闭0xC3 v 的0x9B。[/QUERP]

    (笑声)  请按照文章 How to Submit a Compiler Test Case 中的说明进行操作。

    谢谢、此致、

    乔治

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

    尊敬的乔治:

    我认为我需要将这个问题放在调试器问题上、而不是编译器问题上。

    请看下图、调试器似乎变得疯狂了。 u16NumCounters 的值#defed 为16、但由调试器报告为21917。

    我让调试器处于恒定刷新模式、我正在观察值发生变化、但这些值不应该发生变化、其中一些位于闪存中。

    不确定如何报告此问题?

    谢谢

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

    cingp 说:
    不确定如何报告此问题?

    您能否提供可重现的测试案例? 越简单越好。 理想情况下、它将使整个项目具有源代码和生成的可执行文件。

    如果您想私下发送、请与我开始私下交谈。

    谢谢

    Ki