久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

c51單片機中的動態內存分配問題

查看數: 5180 | 評論數: 15 | 收藏 0
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2021-12-5 08:49

正文摘要:

這兩天在學c51單片機 想著寫一個貪吃蛇練練手,關于蛇的移動(頭插尾出)就想著用隊列(鏈表實現),因為之前也沒專門學過c,發現鏈表用著比想象中麻煩好多,尤其是動態內存分配。c51中不能直接使用malloc和free等函 ...

回復

ID:988145 發表于 2021-12-6 13:27
188610329 發表于 2021-12-5 23:35
后面 0x1000 是長度, 表示你定義這個 數組 4K字節的長度, 這不是 一般的 8051 能夠擁有的XDATA長度,要 ...

感謝!
昨天看上面說不能用內存分配我就數組寫了,用數組確實簡單很多,但看了你說的,我把內存池調到一個合適大小就能正常運行了,但可惜運行一會就會出錯了,我猜測可能是因為內存實在是太小了再加上碎片化導致運行一段時間后malloc就不能正確分配內存了。用struct和malloc主要還是c++的編程思路一直會影響我,看來以后寫單片機還是得認清性能問題
ID:57657 發表于 2021-12-6 07:51
188610329 發表于 2021-12-5 20:45
也就整個貪吃蛇,壓根沒必要整什么動態內存。而且,你本質上不應該把它當作“蛇”,就應該是認為是一個二維 ...

無論是什么點陣游戲,都屬于二維流水燈,這類算法本身就有難度,你應該先用C或C++實現,然后再移植進去。
ID:624769 發表于 2021-12-5 23:35
會會會不會 發表于 2021-12-5 15:01
還有就是其中 unsigned char xdata malloc_mempool [0x1000]; 這條語句后面的 [0x1000] 是指定 ...

后面 0x1000 是長度, 表示你定義這個 數組 4K字節的長度, 這不是 一般的 8051 能夠擁有的XDATA長度,要么是增強型51,要么是 真的外置擴展 芯片了。 至少如果你的是 STC89C516的話,是無法提供那么多的。
ID:624769 發表于 2021-12-5 20:45
也就整個貪吃蛇,壓根沒必要整什么動態內存。而且,你本質上不應該把它當作“蛇”,就應該是認為是一個二維的流水燈,無非給這個流水燈加一些判斷,比如下一個亮起的燈,由按鍵決定 橫坐標 +-1 還是縱坐標 +-1。然后,這個新的燈的坐標,超出邊界,則判定 GAME OVER , 這個燈的坐標,等于已經亮著的流水燈中的某一個燈的時候,判定 GAME OVER, 就夠了!∪绻阌玫氖恰TC89C516的話,做8x8的貪吃蛇就沒意思了,做16x16 的不好么? 剛好256,尋址正好1個字節,充分利用8位單片機的所有性能。
ID:624769 發表于 2021-12-5 20:34
會會會不會 發表于 2021-12-5 14:58
我用的是89c516, 還是說不管是c51還是c516,我能訪問的ram只有120字節?如果這么說的話倒也就合理了,走 ...

STC89c516  的話, RAM 是1280     , 256 IDATA(前部的128 可為DATA)  和 1024 的 XDATA 共計1280。

如其他品牌,你可以查找相關手冊, 造51的太多了,沒人能全知道。
ID:624769 發表于 2021-12-5 20:00
樓上的,你們樓歪了。!
ID:57657 發表于 2021-12-5 19:02
Hephaestus 發表于 2021-12-5 16:28
知名大廠如intel、Siemens(現Infineon)、Philips(現NXP)都曾經是51生產大廠,然而20年前紛紛停產了所 ...

3個月內有200多個STC的帖子,STM8的帖子不到30個,這就是在國內開始淘汰的原因,你可以站內高級搜索。
ID:57657 發表于 2021-12-5 18:41
Hephaestus 發表于 2021-12-5 16:28
知名大廠如intel、Siemens(現Infineon)、Philips(現NXP)都曾經是51生產大廠,然而20年前紛紛停產了所 ...

STC和STM的區別等于華為和三星的區別,這就是在國內越來越沒人用三星,哪國的品牌只有那國人用的多。
ID:883242 發表于 2021-12-5 16:28
npn 發表于 2021-12-5 15:44
STC8一出現,STM8就會慢慢淘汰了。
沒看見代碼里用了XDATA內存? 有64KB的尋址范圍。

知名大廠如intel、Siemens(現Infineon)、Philips(現NXP)都曾經是51生產大廠,然而20年前紛紛停產了所有的51產品。如果真有市場,輪得到STC吃殘羹剩飯?用STC的人聲勢浩大,但是有用嗎?每個人出貨量能有幾片???跟STM8、PIC等單片機比產量,就是個笑話,別不以為恥反以為榮。
ID:57657 發表于 2021-12-5 15:44
Hephaestus 發表于 2021-12-5 12:04
你好歹用個STM8啊,8051這么陳舊的結構直接尋址能力只有120字節玩兒動態分配內存是不是開玩笑?

STC8一出現,STM8就會慢慢淘汰了。
沒看見代碼里用了XDATA內存? 有64KB的尋址范圍。
ID:988145 發表于 2021-12-5 15:01
  1. #include <stdlib.h>

  2. unsigned char xdata malloc_mempool [0x1000];


  3. void tst_init_mempool (void) {
  4.   int i;
  5.   xdata void *p;

  6.   init_mempool (&malloc_mempool, sizeof(malloc_mempool));

  7.   p = malloc (100);

  8.   for (i = 0; i < 100; i++)
  9.     ((char *) p)[i] = i;

  10.   free (p);
  11. }
復制代碼
還有就是其中 unsigned char xdata malloc_mempool [0x1000]; 這條語句后面的 [0x1000] 是指定起始地址嗎
ID:988145 發表于 2021-12-5 14:58
Hephaestus 發表于 2021-12-5 12:04
你好歹用個STM8啊,8051這么陳舊的結構直接尋址能力只有120字節玩兒動態分配內存是不是開玩笑?

我用的是89c516, 還是說不管是c51還是c516,我能訪問的ram只有120字節?如果這么說的話倒也就合理了,走了兩三下就不走了是因為之后的內存沒法訪問?
ID:139866 發表于 2021-12-5 12:34
ID:883242 發表于 2021-12-5 12:04
你好歹用個STM8啊,8051這么陳舊的結構直接尋址能力只有120字節玩兒動態分配內存是不是開玩笑?
ID:230742 發表于 2021-12-5 11:05
本論壇有強大的搜索功能,搜索一下。有其它大佬的程序,先下載下來學習一下。事半功倍。

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久成人精品免费播放动漫 | 久久亚洲国产精品 | 91国在线高清视频 | 91视频免费在观看 | 日韩欧美精品一区 | 亚洲男人天堂2024 | 日韩精品四区 | av网站免费观看 | 秋霞在线一区二区 | 国产区在线视频 | h片在线播放 | 精品国产一区二区 | 久久久国产一区二区 | 99视频免费 | 精品国产乱码久久久久久闺蜜 | 国产精品久久av | 福利网址 | 97精品一区二区 | 欧美激情一区二区三级高清视频 | 国内精品视频在线 | a a毛片 | 日本三级在线网站 | www.中文字幕 | 521av网站 | 国产精品久久久久免费 | 亚洲毛片在线观看 | 老牛嫩草一区二区三区av | 欧美一级免费黄色片 | 国产亚洲精品久久久久久豆腐 | 美女久久久久久久久 | 国产精品国产精品国产专区不卡 | 视频精品一区二区三区 | 色婷婷精品久久二区二区蜜臂av | 日韩中文字幕高清 | 成人在线观看免费爱爱 | 久久精品女人天堂av | 国产视频1 | 日韩欧美视频 | 毛片高清| 亚洲性视频网站 | 中文一区 |