0

基本上我有一堆 2 字节整数顺序写入 32 位闪存中。如何将这些作为 int16 数组访问?

我编写了数组而不考虑单词边界。但如果需要,我可以添加填充,以便数组从单词边界开始。

这是我写闪存的代码(基本上它只是将每 4 个字节组合成一个字,然后将该字写入闪存):

   for(flash_page = 0; flash_page < protocol_pages; flash_page++){ //loop through all the pages
       for(flash_address = 0; flash_address < NUMBER_OF_INSTRUCTIONS_IN_PAGE; flash_address++){ //loop through all the words in the page
           for (byte_address = 0; byte_address < 4; byte_address++){ //loop through the byte in each word
               buffer_check();
               flash_word += buffer[buffer_index] << (8*(3-byte_address));
               buffer_index++;
               bytes_written++;
               if(bytes_written >= data_length)
                   break;
           }
           ///////Write word here
           NVMWriteWord((void*) &(proto_data_addr[flash_page][flash_address]), flash_word);
           flash_word = 0;
           if(bytes_written >= data_length)
                break;
       }
       if(bytes_written >= data_length)
            break;
   }

混合到这个字节块中的是首尾相连的 2 字节整数序列。将它们写入闪存后,如何将它们作为数组访问?我是否必须填充数组以便每个单词中有 2 个 int16?

谢谢!

4

1 回答 1

0

好,我知道了!我创建了一些不同类型的 const 数组,并使用调试器在内存中查看了它们。事实证明......它们都只是像你期望的那样按顺序排列。没有填充。

诀窍是:每个 BYTE 都有自己的地址,而不是每个字(32 位)。因此,在将一堆 int16 写入闪存后,您可以使用指针正常访问它们。

我错误地认为 INT16 的 array[a] 相当于*(array+a),但它知道数据大小,所以它实际上相当于*(array+(a*VARIABLE_SIZE))

于 2015-04-23T13:57:27.587 回答