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.

[参考译文] LAUNCHXL-F2.8377万S:关于使用命令"DELAY()"和"rand()"进行刷新的问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/575567/launchxl-f28377s-questions-about-flashing-with-commands-delay-and-rand

部件号:LAUNCHXL-F2.8377万S

大家好,

我在n´t F2.8377万S控制器时遇到了两个问题,我不知道原因。 我希望有人能帮助我。


第一个问题:

在一个程序中,我编写了启动例程以设置ADC设置。 在这些命令中,有一个命令

延迟(1000); 

如果我启动Debug-modm,程序运行良好。 但是,如果我要刷新此程序并在调试操作中启动“播放”,则F2837xS_DefaultISR.c将打开,并在“interrupt void ilical_ISR(void)"中停止。 如果我使用命令  

ASM (" RPT #3 || NOP"); 

程序正在运行。 所以,命令delay()有什么问题??

第二个问题:

也是闪烁问题。 我写了一个progarmm来挑选假数字。 我使用了命令

ZzTimer =(rand ()%((50+1)-0)+ 0; 

在Debug modus中,程序正在运行! n´t没有问题,但如果我将程序刷新到控制器,程序不会选择一个数字。 我猜变量中总是有数字0。 我在这里的另一个线程中找到了使用此命令的解决方案:

ZzTimer = 0.0 +(int)(50.0 *rand()/(RAND_MAX_MAX+R)); 1.0 

使用此命令,程序正在闪存上运行。 n´t我不知道为什么。 是否有人能写出问题所在?

我希望有人能回答。

谢谢!

祝你好

Stefan

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

    您好,Stefan,

    如何定义延迟? 它是否与F2837xS_Examples.h中定义的DELAY _US相同? 如果是这样,您会注意到基础F28x_usDelay()函数是要从RAM运行的。 在您尝试调用之前,代码是否正确地将其从闪存复制到RAM? 如果预定义符号中有_flash,并且您正在项目中使用F2837xS_sysctrl.c,则这应该已经在InitSysCtrl()中发生。

    谢谢!

    Whitney

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

    您好,Whitney,

    感谢您快速,正确的回答! delay_us的问题已解决!

    我看到我在这篇文章中写的“delay”命令不正确(copy-past-fail sorrect)。 我已经接受了你所解释的"拖延"命令。

    DELAY _US (1000);	// ADC加电延迟 

    此命令在F2837xS_Examples.h中使用以下行定义:

    extern void F28x_usDelay (Long LoopCount);
    //请勿修改此行。
    #define delay_US(A) F28x_usDelay((((((. 长双精度) A * 1000.0L)/(长双精度) CPU_RATE - 9.0L)/ 5.0L) 

    此外,delay_us文件F2837xS_usDelay.asm具有汇编行。 在此文件中,我可以看到命令".sect "ramfuncs"。

    好的,为了解决我的问题,我查看了我的Command-File 2.8377万S_RAM_Ink.cmd,发现我没有在我的Flash-RAM中写入ramfuncs。 使用.cmd文件中的以下命令可以解决问题

    Ramfuns :> FLASH_BCDEFGHIJKLMN,页= 0 

    感谢Whitney!

    有人知道我关于rand()命令的另一个问题吗? 我´s这是我在C编程中的一个简单的误解。

    最好的清菜

    Stefan

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

    很高兴修复了它!

    不知道rand()为什么会出现问题。 你将什么种子传递到srand()? 我们的编译器论坛中的某个人可能比我更快地发现问题(如果您想询问他们)。

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

    您好,Whitney,

    我编写了以下命令行(这里是简短版本)

    #include "F2837xS_device.h"// main-Header-File
    #include "stdlib.h"
    #include "time.h"
    //现在在本部分I init中。一些变量
    const int MaxValue =0;
    const int MinValue =0;
    
    void main(void)
    {//
    在此部分中,我执行正常的配置行,如"InitCtrl(and so");
    
    
    ZzTimer =(rand()%((MaxValue +1)- MinValue ))+ MinValue ;
    
    EINT;
    ERTM;
    
    while (1)
    {}
    } 

    n´t µC,该程序在闪存后在debug_modus中工作,但如果我有独立的操作,则不工作

    重复:

    ZzTimer = 0.0 +(int)(50.0 *rand()/(RAND_MAX_MAX+R)); 1.0 

    程序工作正常。 它也适用于

    ZzTimer0 = MinValue +(int)(MaxValue*rand()/(RAND_MAX_MING)); 1.0 

    并在该行前面声明

    const浮点最大值= 50.0 ;
    const浮点最小值= 0.0 ; 

    如果使用带有modulo %和float-value的命令行,则会出现错误

    #31表达式必须具有积分类型

    因此,我可以看到:

    • ZzTimer =(rand()%((MaxValue+1)-MinValue))+ MinValue;使用float变量和值n´t时不起作用。 但程序使用的是整数变量和值,并且是debug-modus。 它在n´t独立操作中不能与整数值一起使用。 这是我n´t不明白的…… 为什么它在debug-modus而不是在独立操作中执行他的工作。 (两个均闪存)
    • ZzTimer = MinValue+(int)(MaxValue*rand()/(RAND_MAX_MAX+FLOT)) 1.0 ;正在调试-操作和独立操作中处理浮点变量和值。

    有人知道为什么此once命令在debug-modus中工作,而不是在n ü µC的独立操作中工作? 或者我应该在编译器论坛中写下这个问题吗?

    最好的清菜

    Stefan

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

    我仍然不知道为什么会出现这种情况。 我知道time()的行为会因您是否连接到CCS而异:

    e2e.ti.com/.../51.4882万

    但我认为这只会影响您的随机性,而不会给出您所描述的行为。 仍可能希望了解编译器论坛是否可以提供任何见解。

    Whitney