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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5169|回復: 15
打印 上一主題 下一主題
收起左側

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

[復制鏈接]
跳轉到指定樓層
樓主
這兩天在學c51單片機 想著寫一個貪吃蛇練練手,關于蛇的移動(頭插尾出)就想著用隊列(鏈表實現),因為之前也沒專門學過c,發現鏈表用著比想象中麻煩好多,尤其是動態內存分配。c51中不能直接使用malloc和free等函數,要先初始化一個堆(init_mempool函數)但這個函數我看了官方文檔也沒看明白,照葫蘆畫瓢寫了個差不多的,但會有很奇怪的現象--只能往右邊走,而且走一會就停了 只有一個等在亮

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

堆初始化

堆初始化

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

全局函數

全局函數

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

蛇初始化

蛇初始化

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

蛇的定義

蛇的定義

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

蛇位置更新

蛇位置更新

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

蛇移動函數1

蛇移動函數1

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

蛇移動函數2

蛇移動函數2

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

主函數

主函數

snake.rar

60.92 KB, 下載次數: 7

工程

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

6#
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] 是指定起始地址嗎
回復

使用道具 舉報

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

STC8一出現,STM8就會慢慢淘汰了。
沒看見代碼里用了XDATA內存? 有64KB的尋址范圍。
回復

使用道具 舉報

8#
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等單片機比產量,就是個笑話,別不以為恥反以為榮。
回復

使用道具 舉報

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

STC和STM的區別等于華為和三星的區別,這就是在國內越來越沒人用三星,哪國的品牌只有那國人用的多。
回復

使用道具 舉報

10#
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個,這就是在國內開始淘汰的原因,你可以站內高級搜索。
回復

使用道具 舉報

11#
ID:624769 發表于 2021-12-5 20:00 來自觸屏版 | 只看該作者
樓上的,你們樓歪了!!
回復

使用道具 舉報

12#
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的太多了,沒人能全知道。
回復

使用道具 舉報

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

使用道具 舉報

14#
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的話,是無法提供那么多的。
回復

使用道具 舉報

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

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

使用道具 舉報

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

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 色偷偷噜噜噜亚洲男人 | 久久久久久成人 | 日日操夜夜干 | 日韩av网址在线观看 | 日韩视频在线观看一区二区 | 综合九九| 成人av一区 | 精品欧美在线观看 | 电影午夜精品一区二区三区 | 欧美高清视频在线观看 | 成人欧美一区二区三区在线播放 | 欧美大片在线观看 | 99久久精品免费看国产高清 | 国产成人精品一区二区三区四区 | 欧美一级在线免费观看 | 亚洲国产看片 | 国产99热精品| 99热激情| 亚洲福利在线视频 | 精品国产1区2区3区 一区二区手机在线 | 成人精品鲁一区一区二区 | 亚洲第一天堂 | 96久久久久久 | 99re6在线视频精品免费 | 国产乱肥老妇国产一区二 | 成人久久视频 | 91在线视频观看免费 | 黄色一级片在线播放 | 国产伦精品一区二区三区精品视频 | 成人在线观看黄 | 婷婷综合网 | 亚洲成人精品 | 视频一区二区三区在线观看 | 亚洲午夜在线 | 亚洲欧美日韩精品久久亚洲区 | 久草新在线 | 国产三级一区二区 | 在线观看a视频 | 在线播放国产一区二区三区 | 亚洲男人的天堂网站 | 成人伊人 |