0

为了在程序执行期间保留变量(char 数组)的值,我有以下代码用于更大的代码。但是我看到 incrementCtr 没有效果,因为计数器被重置为零。你能指出在这里使用静态的正确方法吗?

    static typedef struct {
        uint8_t data[8];
    }count_t;

    ......
    static count_t count;

    static void incrementCtr(count_t* count) {
        int i;
        for (i = sizeof(count->data) - 1; i >= 0; --i) {
            if (++count->data[i] != 0) {
                break;
            }
        }
    }

    void myroutine{
        .....


        ....

        count_t *counter;
        counter = &count;
        uint32_t len = sizeof(*counter);
        memset(counter ,0,sizeof(*counter));
        for (i = 0; i < len; i++){
            printf("counter->data[%d] = %02X\n", i, counter->data[i]);
        }
        .......
do {
        .......
        incrementCtr(counter);
         for (i = 0; i < len; i++){
            printf("counter->data[%d] = %02X\n", i, counter->data[i]);
         }
        } while (true);
        return 0;
    }

第一个 printf 显示所有字节 0,在第二个 printf 中,字节值增加 1。但随后计数器重新初始化为 0 agian :(

4

1 回答 1

0

如果您static count_t count;在头文件中定义,可能会发生这种情况。count在这种情况下,对于包含此标头的任何翻译单元(cpp 文件),您都有单独的变量。

于 2013-05-28T10:03:50.647 回答