發新話題
打印

範例程式疑問

範例程式疑問

您好:我是使用C8051F120-TB外接記憶體AB1,我執行範例程式C:\SiLabs\MCU\Examples\C8051F12x_13x\EMIF\F12x_EMIF_AB1.c,對下面成是片段執行結果有些疑問:
   // Write xdata space
   pchar = 0x4000;
   for (i = 0; i < RAM_SIZE; i++) {
      *pchar = ~i;
      // Print status to UART0
      if ((i % 16) == 0) {
         printf ("\nwriting 0x%04x: %02x ", (unsigned) i, (unsigned) ((~i) & 0xff));
      } else {
         printf ("%02x ", (unsigned) ((~i) & 0xff));
      }
      pchar++;
   }
   // Verify
   pchar = 0x4000;
   for (i = 0; i < RAM_SIZE; i++) {
      if (*pchar != ((~i) & 0xff)) {
         printf ("Verify error!\n");
         while (1);
      }
      // Print status to UART0
      if ((i % 16) == 0) {
         printf ("\nverifying 0x%04x: %02x ", (unsigned) i, (unsigned) *pchar);
      } else {
         printf ("%02x ", (unsigned) *pchar);
      }
      pchar++;
   }
   printf ("\n\nTest complete.");

執行完應該是會printf "Test complete"在螢幕上,第一段(// Write xdata space)寫入資料的程式printf出來的值都是正確的,但是第二段(// Verify)比對寫入資料的程式卻比對出錯誤,printf "Verify error!",請教前輩是哪裡有問題阿,謝謝!

TOP

執行結果

我把RAM_SIZE設為64,先把比對的程式拿掉,讓他印出記憶體內的值:
   // Write xdata space
   pchar = 0x4000;
   for (i = 0; i < RAM_SIZE; i++) {
      *pchar = i;
      // Print status to UART0
      if ((i % 16) == 0) {
         printf ("\nwriting 0x%04x: %d ", (unsigned) i, (unsigned) i);
      } else {
         printf ("%d ", (unsigned) i);
      }
      pchar++;
   }
   // Verify
   pchar = 0x4000;
   for (i = 0; i < RAM_SIZE; i++) {
/*      if (*pchar != i) {                    //我先把比對的程式拿掉,讓他印出記憶體內的值
         printf ("Verify error!\n");
         while (1);
      }*/
      // Print status to UART0
      if ((i % 16) == 0) {
         printf ("\nverifying 0x%04x: %d ", (unsigned) i, (unsigned) *pchar);
      } else {
         printf ("%d ", (unsigned) *pchar);
      }
      pchar++;
   }
   printf ("\n\nTest complete.");
執行結果為:
writing 0x0000: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
writing 0x0010: 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
writing 0x0020: 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
writing 0x0030: 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
verifying 0x0000: 2 3 2 3 6 7 6 7 10 11 10 11 14 15 14 15
verifying 0x0010: 18 19 18 19 22 23 22 23 26 27 26 27 30 31 30 31
verifying 0x0020: 34 35 34 35 38 39 38 39 42 43 42 43 46 47 46 47
verifying 0x0030: 50 51 50 51 54 55 54 55 58 59 58 59 62 63 62 63

Test complete.
請問為什麼寫入記憶體的值,跟讀出的值會不一樣阿

TOP

請求支援

請問有沒有哪位前輩可以指點一下?拜託了...

TOP

>>  pchar = 0x4000;
你為甚麼要設 pchar = 0x4000;  ,你有接EMIF to Ext.RAM嗎?
你改 pchar = 0x1000;試看看.


J.K

TOP

Jacky前輩 您好:
  非常感謝您回答我的問題,但是我有接外部記憶體AB1(https://www.silabs.com/products/mcu/Pages/AB1.aspx)

TOP

我在想因該是你的EMIF設置的問題,還是有問題在跟我們Sale聯絡,我們FAE會幫你解決~

J.K

TOP

你把i宣告為char 試看看,你是不是宣告為long,所以寫入RAM是錯的,所以讀出也是錯的~

J.K

TOP

Jacky前輩 您好:
  i 宣告為char 結果還是一樣。範例程式前面有先把記憶體都寫入"0",在比對是否都為"0",這段程式會過,但之後在記憶體寫入值,比對就出現錯誤,請問您覺得是範例程式有問題,還是AB1有問題?

TOP

Test complete.
writing 0x0000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
writing 0x0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
writing 0x0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
writing 0x0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
verifying 0x0000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
verifying 0x0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
verifying 0x0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
verifying 0x0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
writing 0x0000: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
writing 0x0010: 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
writing 0x0020: 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
writing 0x0030: 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
verifying 0x0000: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
verifying 0x0010: 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
verifying 0x0020: 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
verifying 0x0030: 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63

我根據你的程式 下去模擬
列印出來是正常的

TOP

你是否可以 先測試你的 F120 prot  io 來看是否 可以正常work
記得 要切  page

TOP

發新話題