[問題] 8051中實作queue link的問題

看板ASM (組合語言)作者 (800IM)時間11年前 (2014/01/28 12:35), 編輯推噓3(304)
留言7則, 2人參與, 最新討論串1/1
用 malloc 時發現 在 keil 必須先用 xdata 全域變數要好空間, 再用 init_mempool() 指定這塊 xdata空間可供動態配置 問題1:這樣好像不是真的動態記憶體配置? 我用一個有 1024bytes XRAM 的 8051 實作 queue link list 目前先做 push only, 就是只能增加元素 每次都用 UART 傳入要 push 的字元,然後也用 UART 傳出陣列的所有元素 code如下 http://paste.ideaslabs.com/show/dDk6DPBITu UART輸出如下 sizeof(struct Node)=4 sizeof(struct Node*)=3 sizeof(char)=1 FIFO Start! &(ptrX->Humidity)=100y i=1 &(ptrX->Humidity)=100yy i=2 ...(略) &(ptrX->Humidity)=100yyyyyyyyyyyyyyyyyyyyyyyyyyyy i=28 &(ptrX->Humidity)=100yyyyyyyyyyyyyyyyyyyyyyyyyyyyy i=29 &(ptrX->Humidity)=100yyyyyyyyyyyyyyyyyyyyyyyyyyyyyy i=30 &(ptrX->Humidity)=100yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy i=31 &(ptrX->Humidity)=100yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy i=32 &(ptrX->Humidity)=100yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy i=32 &(ptrX->Humidity)=100yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy i=32 &(ptrX->Humidity)=100yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy i=32 問題2:為何sizeof(struct Node*)=3而不是2? 資料記憶體最大範圍只有0x0000~0xFFFF而已 問題3:ptrX為何每次都相同? ptrX每次push都會接在尾巴用掉,下次push又會再用malloc重新要一塊,     應該會不同才對啊? 為了確認這個問題,我在VS2012中做一次,的確是每次要到的位址都會固定增加 問題4:init_mempool要了0x100個char, 每個struct Node大小為4(單位大小同char) 應該可放256/4=64個struct Node,但是實驗結果只能放32個 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.122.44.49

02/04 11:40, , 1F
問題2, 因為你宣告的是generic pointer, 需要多一個byte
02/04 11:40, 1F

02/04 11:41, , 2F
來判別pointer指到的位置是data, idata, xdata等
02/04 11:41, 2F
已了解, 謝謝

02/04 11:42, , 3F
改成sizeof(struct Node xdata *)應該就會變2 bytes
02/04 11:42, 3F

02/04 12:36, , 4F
push/pop是stack的operations, queue是enqueue/dequeue,
02/04 12:36, 4F

02/05 14:11, , 5F
問題3 你是怎麼觀察到每次ptrX都相同啊?
02/05 14:11, 5F
&(ptrX->Humidity)=100 ※ 編輯: deo2000 來自: 118.232.60.242 (02/06 03:35)

02/10 00:19, , 6F
問題3你print出來的值不正確, 原因同問題2.
02/10 00:19, 6F

02/10 00:21, , 7F
問題4 去\keil\c51\lib找相關 .c source code
02/10 00:21, 7F
※ 編輯: deo2000 來自: 140.122.165.185 (03/04 08:19)
文章代碼(AID): #1IvpDzI5 (ASM)
文章代碼(AID): #1IvpDzI5 (ASM)