簡體   English   中英

如何在運行時更改嵌入式 c 中 header 文件中定義的值?

[英]How to change the values defined in header file in embedded c during runtime?

我正在使用 MSP430FR6047 開展一個項目,並且我需要訪問和更改先前定義的參數的某些 header 文件。 目前,每次我更改參數時,我都必須使用修改過的 header 文件的 MCU 進行 flash MCU,但我正在探索是否有其他選項可以在不刷新新代碼的情況下進行這些更改,最好是通過 UART 或其他一些通信協議。

所以我的問題是如何在運行時更改這些參數? 有誰知道我應該從哪里開始?

謝謝

正在運行的程序無法更改其源代碼,假設您的意思是#define PARAMETER 23 您需要變量而不是常量。

一個原始的解決方案是:

  1. 為每個參數創建一個全局變量,在額外的 header 文件中聲明所有變量,並在額外的源文件中定義所有變量以便更好地維護。

  2. 在新的 header 文件中取消定義所有參數宏並重新定義它們以使用變量而不是文字。

  3. 在使用源文件中,包含原始 header 文件,然后包含新的 header 文件。

  4. 最初初始化變量,並在運行時根據需要更改參數。 (可以在新的源文件中進行初始化。)

此解決方案避免大量編輯使用的源文件,並保持原始 header 文件完好無損。

例子:

/* original.h */

#define PARAMETER 23

int f(void); /* returns PARAMETER */
/* new.h */

#if defined(PARAMETER)
    #undef PARAMETER
    #define PARAMETER parameter
#endif

extern int parameter;
/* new.c */

#include "new.h" /* ensures that declarations and definitions match */

int parameter = 23;
/* original.c */

#include "original.h"
#include "new.h"

int f(void) {
    return PARAMETER;
}
/* main.c */

#include <stdio.h>

#include "original.h"
#include "new.h"

int main(void) {
    PARAMETER = 42;
    printf("%d\n", f());
}

如果您想更改原始源代碼,請隨意擺脫所有這些預處理器的東西,並直接使用變量而不是常量。 但是,您應該重新考慮您的設計,並將參數作為 arguments 提供給現有或新功能。 應避免使用全局變量,原因留給您練習。

在 header 文件中更改參數有 2 種情況。 案例 1:Header 定義默認值 例如,在 header 文件中,您有:

    #define DEFAULT_VALUE      10

然后在.c 文件中,如果它使用如下:

    if (a < DEFAULT_VALUE) 
    { /* Do something */ }

如果是這種情況,您可以更新如下:

  • 修改了原行:

     if (a < var_DefaultValue) { /* Do something */ }
  • var_DefaultValue是全局變量:

     int var_DefaultValue = DEFAULT_VALUE;
  • 默認情況下,這將作為原始文件工作。

  • 如果要更改值,可以創建一個線程以在某處接收新值,然后更新為var_DefaultValue

案例 2:Header 文件定義了一些預編譯標簽。 例如:

    #define DEFAULT_FEATURE  1

在.c 文件中,您指的功能如下:

    #if DEFAULT_FEATURE
    /* Do Something */
    #endif

對於這種情況,無論如何都不可能改變它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM