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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4685|回復(fù): 15
打印 上一主題 下一主題
收起左側(cè)

c51單片機中的動態(tài)內(nèi)存分配問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:988145 發(fā)表于 2021-12-5 08:49 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
這兩天在學(xué)c51單片機 想著寫一個貪吃蛇練練手,關(guān)于蛇的移動(頭插尾出)就想著用隊列(鏈表實現(xiàn)),因為之前也沒專門學(xué)過c,發(fā)現(xiàn)鏈表用著比想象中麻煩好多,尤其是動態(tài)內(nèi)存分配。c51中不能直接使用malloc和free等函數(shù),要先初始化一個堆(init_mempool函數(shù))但這個函數(shù)我看了官方文檔也沒看明白,照葫蘆畫瓢寫了個差不多的,但會有很奇怪的現(xiàn)象--只能往右邊走,而且走一會就停了 只有一個等在亮

堆初始化.png (7.99 KB, 下載次數(shù): 116)

堆初始化

堆初始化

全局函數(shù).png (6.22 KB, 下載次數(shù): 122)

全局函數(shù)

全局函數(shù)

蛇初始化.png (36.2 KB, 下載次數(shù): 120)

蛇初始化

蛇初始化

蛇的定義.png (89.74 KB, 下載次數(shù): 143)

蛇的定義

蛇的定義

蛇位置更新.png (9.97 KB, 下載次數(shù): 120)

蛇位置更新

蛇位置更新

移動蛇1.png (47.57 KB, 下載次數(shù): 123)

蛇移動函數(shù)1

蛇移動函數(shù)1

移動蛇2.png (52.56 KB, 下載次數(shù): 117)

蛇移動函數(shù)2

蛇移動函數(shù)2

主函數(shù).png (99.83 KB, 下載次數(shù): 126)

主函數(shù)

主函數(shù)

snake.rar

60.92 KB, 下載次數(shù): 7

工程

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:230742 發(fā)表于 2021-12-5 11:05 | 只看該作者
本論壇有強大的搜索功能,搜索一下。有其它大佬的程序,先下載下來學(xué)習(xí)一下。事半功倍。
回復(fù)

使用道具 舉報

板凳
ID:883242 發(fā)表于 2021-12-5 12:04 | 只看該作者
你好歹用個STM8啊,8051這么陳舊的結(jié)構(gòu)直接尋址能力只有120字節(jié)玩兒動態(tài)分配內(nèi)存是不是開玩笑?
回復(fù)

使用道具 舉報

地板
ID:139866 發(fā)表于 2021-12-5 12:34 | 只看該作者
回復(fù)

使用道具 舉報

5#
ID:988145 發(fā)表于 2021-12-5 14:58 | 只看該作者
Hephaestus 發(fā)表于 2021-12-5 12:04
你好歹用個STM8啊,8051這么陳舊的結(jié)構(gòu)直接尋址能力只有120字節(jié)玩兒動態(tài)分配內(nèi)存是不是開玩笑?

我用的是89c516, 還是說不管是c51還是c516,我能訪問的ram只有120字節(jié)?如果這么說的話倒也就合理了,走了兩三下就不走了是因為之后的內(nèi)存沒法訪問?
回復(fù)

使用道具 舉報

6#
ID:988145 發(fā)表于 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. }
復(fù)制代碼
還有就是其中 unsigned char xdata malloc_mempool [0x1000]; 這條語句后面的 [0x1000] 是指定起始地址嗎
回復(fù)

使用道具 舉報

7#
ID:57657 發(fā)表于 2021-12-5 15:44 | 只看該作者
Hephaestus 發(fā)表于 2021-12-5 12:04
你好歹用個STM8啊,8051這么陳舊的結(jié)構(gòu)直接尋址能力只有120字節(jié)玩兒動態(tài)分配內(nèi)存是不是開玩笑?

STC8一出現(xiàn),STM8就會慢慢淘汰了。
沒看見代碼里用了XDATA內(nèi)存? 有64KB的尋址范圍。
回復(fù)

使用道具 舉報

8#
ID:883242 發(fā)表于 2021-12-5 16:28 | 只看該作者
npn 發(fā)表于 2021-12-5 15:44
STC8一出現(xiàn),STM8就會慢慢淘汰了。
沒看見代碼里用了XDATA內(nèi)存? 有64KB的尋址范圍。

知名大廠如intel、Siemens(現(xiàn)Infineon)、Philips(現(xiàn)NXP)都曾經(jīng)是51生產(chǎn)大廠,然而20年前紛紛停產(chǎn)了所有的51產(chǎn)品。如果真有市場,輪得到STC吃殘羹剩飯?用STC的人聲勢浩大,但是有用嗎?每個人出貨量能有幾片???跟STM8、PIC等單片機比產(chǎn)量,就是個笑話,別不以為恥反以為榮。
回復(fù)

使用道具 舉報

9#
ID:57657 發(fā)表于 2021-12-5 18:41 | 只看該作者
Hephaestus 發(fā)表于 2021-12-5 16:28
知名大廠如intel、Siemens(現(xiàn)Infineon)、Philips(現(xiàn)NXP)都曾經(jīng)是51生產(chǎn)大廠,然而20年前紛紛停產(chǎn)了所 ...

STC和STM的區(qū)別等于華為和三星的區(qū)別,這就是在國內(nèi)越來越?jīng)]人用三星,哪國的品牌只有那國人用的多。
回復(fù)

使用道具 舉報

10#
ID:57657 發(fā)表于 2021-12-5 19:02 | 只看該作者
Hephaestus 發(fā)表于 2021-12-5 16:28
知名大廠如intel、Siemens(現(xiàn)Infineon)、Philips(現(xiàn)NXP)都曾經(jīng)是51生產(chǎn)大廠,然而20年前紛紛停產(chǎn)了所 ...

3個月內(nèi)有200多個STC的帖子,STM8的帖子不到30個,這就是在國內(nèi)開始淘汰的原因,你可以站內(nèi)高級搜索。
回復(fù)

使用道具 舉報

11#
ID:624769 發(fā)表于 2021-12-5 20:00 來自手機 | 只看該作者
樓上的,你們樓歪了!!!
回復(fù)

使用道具 舉報

12#
ID:624769 發(fā)表于 2021-12-5 20:34 | 只看該作者
會會會不會 發(fā)表于 2021-12-5 14:58
我用的是89c516, 還是說不管是c51還是c516,我能訪問的ram只有120字節(jié)?如果這么說的話倒也就合理了,走 ...

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

如其他品牌,你可以查找相關(guān)手冊, 造51的太多了,沒人能全知道。
回復(fù)

使用道具 舉報

13#
ID:624769 發(fā)表于 2021-12-5 20:45 | 只看該作者
也就整個貪吃蛇,壓根沒必要整什么動態(tài)內(nèi)存。而且,你本質(zhì)上不應(yīng)該把它當(dāng)作“蛇”,就應(yīng)該是認(rèn)為是一個二維的流水燈,無非給這個流水燈加一些判斷,比如下一個亮起的燈,由按鍵決定 橫坐標(biāo) +-1 還是縱坐標(biāo) +-1。然后,這個新的燈的坐標(biāo),超出邊界,則判定 GAME OVER , 這個燈的坐標(biāo),等于已經(jīng)亮著的流水燈中的某一個燈的時候,判定 GAME OVER, 就夠了。 如果你用的是 STC89C516的話,做8x8的貪吃蛇就沒意思了,做16x16 的不好么? 剛好256,尋址正好1個字節(jié),充分利用8位單片機的所有性能。
回復(fù)

使用道具 舉報

14#
ID:624769 發(fā)表于 2021-12-5 23:35 | 只看該作者
會會會不會 發(fā)表于 2021-12-5 15:01
還有就是其中 unsigned char xdata malloc_mempool [0x1000]; 這條語句后面的 [0x1000] 是指定 ...

后面 0x1000 是長度, 表示你定義這個 數(shù)組 4K字節(jié)的長度, 這不是 一般的 8051 能夠擁有的XDATA長度,要么是增強型51,要么是 真的外置擴展 芯片了。 至少如果你的是 STC89C516的話,是無法提供那么多的。
回復(fù)

使用道具 舉報

15#
ID:57657 發(fā)表于 2021-12-6 07:51 | 只看該作者
188610329 發(fā)表于 2021-12-5 20:45
也就整個貪吃蛇,壓根沒必要整什么動態(tài)內(nèi)存。而且,你本質(zhì)上不應(yīng)該把它當(dāng)作“蛇”,就應(yīng)該是認(rèn)為是一個二維 ...

無論是什么點陣游戲,都屬于二維流水燈,這類算法本身就有難度,你應(yīng)該先用C或C++實現(xiàn),然后再移植進去。
回復(fù)

使用道具 舉報

16#
ID:988145 發(fā)表于 2021-12-6 13:27 | 只看該作者
188610329 發(fā)表于 2021-12-5 23:35
后面 0x1000 是長度, 表示你定義這個 數(shù)組 4K字節(jié)的長度, 這不是 一般的 8051 能夠擁有的XDATA長度,要 ...

感謝!!
昨天看上面說不能用內(nèi)存分配我就數(shù)組寫了,用數(shù)組確實簡單很多,但看了你說的,我把內(nèi)存池調(diào)到一個合適大小就能正常運行了,但可惜運行一會就會出錯了,我猜測可能是因為內(nèi)存實在是太小了再加上碎片化導(dǎo)致運行一段時間后malloc就不能正確分配內(nèi)存了。用struct和malloc主要還是c++的編程思路一直會影響我,看來以后寫單片機還是得認(rèn)清性能問題
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产成人免费一区二区60岁 | 中文字幕av网站 | 亚洲精品久久久一区二区三区 | 亚洲一区免费 | 男女羞羞的网站 | 亚洲精品电影在线观看 | 免费观看的黄色网址 | 五月婷婷在线播放 | 亚洲精品乱码久久久久久蜜桃91 | 国产久视频 | 精品视频亚洲 | 求个av网址 | 色婷婷精品国产一区二区三区 | 国产福利91精品 | 日韩视频国产 | 偷拍自拍网址 | 免费一级片 | 操人视频在线观看 | 久久久久亚洲精品中文字幕 | 日韩欧美精品一区 | 亚洲视频在线观看免费 | 国产一区二区三区色淫影院 | 日韩免费毛片视频 | 欧美乱大交xxxxx另类电影 | 国产丝袜人妖cd露出 | 日韩一级黄色片 | 欧美区在线观看 | 欧美一区二区三区在线看 | 国产japanhdxxxx麻豆| 亚洲高清一区二区三区 | 亚洲自拍偷拍视频 | 精品久久久久久久久久久久久久 | 精品日韩一区二区 | 久久成人免费视频 | 日韩一区二区不卡 | www日本在线播放 | 国产精品久久7777777 | 欧美不卡在线 | 亚洲欧美日韩精品久久亚洲区 | 91精品导航 | 欧美一区二区激情三区 |