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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

C語言如何把一個超大數組賦值后存放到FLASH中?

  [復制鏈接]
跳轉到指定樓層
樓主
ID:997026 發表于 2022-7-24 10:03 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我的FLASH空間比較大,有512K,RAM空間也比較大,接近200K,但是RAM由于還要做其他用途,所以現在需要把一個超大數組保存到FLASH中。
現在有一個超大數組:

uint16_t   databuffer[240][320],

這個數組有240x320=76800個元素,然后占用空間76800x16bit=153KB, 可謂是相當大了,我如何把這個大數組存放到FLASH中呢?

這么大的數組怎么給他賦初值?不可能用大括號的方式,databuffer[240][320]={0xFFFF, 0x32A3........},  7萬多個數據,寫到猴年馬月也寫不完啊。

如果我加關鍵字const uint16_t   databuffer[240][320] 的方式,可以讓他保存在FLASH中,但是沒法先賦初值,如果我用for循環賦值,倒是很快,可是就沒法加const保存到FLASH中了。

誰能解決這個矛盾?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:94031 發表于 2022-7-24 14:02 | 只看該作者
編程時數組直接賦值放FLASH中。
回復

使用道具 舉報

板凳
ID:161164 發表于 2022-7-24 15:22 | 只看該作者
你的7萬多個數據是有來源的吧?Excel?SQL?CSV?
利用這些來源生成一個
uint16_t code databuffer[240][320] = {......};儲存到DtatTable.h內就可以了
回復

使用道具 舉報

地板
ID:997026 發表于 2022-7-24 17:13 | 只看該作者
lkc8210 發表于 2022-7-24 15:22
你的7萬多個數據是有來源的吧?Excel?SQL?CSV?
利用這些來源生成一個
uint16_t code databuffer[240][ ...

沒有來源,,這些數據是LCD的顏色數據,平時我是用for循環直接賦值,賦值后直接使用。因為顏色數據我要用的時候直接for循環賦值就可以了,所以沒必要整成一個excel. 所以這算不算C語言的一個缺陷,大數組的初始化非常不方便,,,,,,只能直接大括號內寫。。。
回復

使用道具 舉報

5#
ID:997026 發表于 2022-7-24 17:15 | 只看該作者
xuyaqi 發表于 2022-7-24 14:02
編程時數組直接賦值放FLASH中。

我這個大數組是為了LCD初始化的時候,DMA直接從數據讀數據刷屏幕,,,因為這些數據基本不涉及到改動,所以考慮放FLASH中,請問編程時直接賦值怎么能放FLASH中?7萬多個數據要一個一個寫嗎?
回復

使用道具 舉報

6#
ID:401564 發表于 2022-7-24 21:17 | 只看該作者
能用for循環直接賦值,這個數據是固定的嗎?或者是有規律的?不知道這是什么意思,沒有用過LCD不知道
在FLASH開辟某個地址,比如0000H存放一個標志位
程序啟動先讀取這個標志位,如果沒有標志,就用for循環寫入FLASH,寫完之后置位標志位并保存,這樣,這你所謂的7萬多個數據就保存在FLASH了
如果已經標志了,就不用寫入了,跳過寫入這一步
下一步就是讀取FLASH中的數據,初始化LCD
這樣就達到了每次開機都能通過讀取FLASH來完成初始化了
不知道這行不行得通
回復

使用道具 舉報

7#
ID:883242 發表于 2022-7-24 22:26 | 只看該作者
7萬個數據怎么可能沒有來源?總不能是隨手瞎寫的吧?
回復

使用道具 舉報

8#
ID:997026 發表于 2022-7-24 23:21 | 只看該作者
Hephaestus 發表于 2022-7-24 22:26
7萬個數據怎么可能沒有來源?總不能是隨手瞎寫的吧?

我說的沒有來源指的是沒有把這7萬多個數據匯總成一個EXCEL表格隨時調用,我是這么用的,我現在的LCD是320x240的分辨率,所以像素是320x240=76800個,用的是RGB565顏色,所以一個像素需要用16bit的數據刷顏色,這個數據量太大,只能用DMA去連續搬運同一個顏色,比如這個顏色是0xFFFF, 所以我的用法是,

for(i=0; i<240; i++)
{
    for(j=0; j<320; j++)
    {
        databuffer[ i][j]=0xFFFF;
  }
}

//然后用DMA搬運
DMA_Senddata16(&databuffer[0][0], 76800);


所以用法很簡單,只是for循環把一個顏色數據賦值給大數組,然后DMA根據數組地址連續搬運。
所以沒什么來源,只是賦值而已。
回復

使用道具 舉報

9#
ID:997026 發表于 2022-7-24 23:23 | 只看該作者
Y_G_G 發表于 2022-7-24 21:17
能用for循環直接賦值,這個數據是固定的嗎?或者是有規律的?不知道這是什么意思,沒有用過LCD不知道
在FLASH ...

數據是固定的,就是LCD的顏色數據,也就是一個RGB565顏色,16bit,2個字節,比如OXFFFF,就是要把這個0XFFFF寫入到這個大數組,簡單說就是寫76800次0XFFFF。
這樣做主要是為了DMA從數組搬運顏色刷整個屏幕,這樣的方法速度最快。

你這個方法我也想過,目前看來,好像也沒別的方法了。
回復

使用道具 舉報

10#
ID:997026 發表于 2022-7-24 23:33 | 只看該作者
Hephaestus 發表于 2022-7-24 22:26
7萬個數據怎么可能沒有來源?總不能是隨手瞎寫的吧?

換句話說,如果有來源,比如這7萬多個數據都整理好了,那我也不來這里提問了,我直接copy到我的代碼里就好了。現在是沒有來源,而且我這個數據是固定的一個值,因為這是刷LCD的顏色值作為全屏畫布用,不是你想的那種整理好的數據,顏色值就是一個固定值,我要刷什么顏色就賦什么值到大數組,所以用for循環就好了。
回復

使用道具 舉報

11#
ID:624769 發表于 2022-7-25 00:03 | 只看該作者
hxdby 發表于 2022-7-24 23:23
數據是固定的,就是LCD的顏色數據,也就是一個RGB565顏色,16bit,2個字節,比如OXFFFF,就是要把這個0XF ...

所以,為什么一定要DMA搬運數組呢? 直接刷76800次不比從數組搬運更快么? 中斷里做一個刷屏標志,做一個底色變量,以及計數,只要刷屏標志被置位,就不停的刷指定的底色,直到計數滿76800次結束,然后清刷屏標志,感覺這樣比搬運數組到DMA,然后DMA自動刷屏效率要高啊。
回復

使用道具 舉報

12#
ID:401564 發表于 2022-7-25 00:58 | 只看該作者
188610329 發表于 2022-7-25 00:03
所以,為什么一定要DMA搬運數組呢? 直接刷76800次不比從數組搬運更快么? 中斷里做一個刷屏標志,做一個 ...

DMA不需要做什么的呀,設定好初始化就可以了,SPI的DMA操作是不用占用主程序時間的
肯定要快一點了
直接寫入76800次,不管是用中斷還是等待,每次寫入完成,你就得清除中斷標志位,中斷返回,大概要1uS吧
那76800次就要多花76800uS=76.8mS
DMA就不需要多花這76.8mS了,程序只要處理DMA傳輸完成之后的幾個操作而已
回復

使用道具 舉報

13#
ID:997026 發表于 2022-7-25 01:25 | 只看該作者
188610329 發表于 2022-7-25 00:03
所以,為什么一定要DMA搬運數組呢? 直接刷76800次不比從數組搬運更快么? 中斷里做一個刷屏標志,做一個 ...

你這種方法在實際LCD刷屏中是行不通的,主要是沒考慮SPI的速率,SPI的頻率一般很低,如果用你這種方法,SPI每次只能傳輸一幀數據,每傳輸一幀需要拉低拉高片選一次,這中間拉低拉高片選的時間加上SPI的低速都夠你受的了,而DMA的好處是只需拉低一次片選,中間可以靠DMA連續無停頓的搬運76800次,就像打%%%一樣的,搬完了拉高片選結束。當然前提是SPI的速度不能太低,太低了,DMA也沒用,但如果不用DMA,大概率直接刷屏的速度是不可能提上來的。我板子都做出來了,現在DMA刷屏速度杠杠的
回復

使用道具 舉報

14#
ID:1040502 發表于 2022-7-25 18:11 | 只看該作者
兩個問題:
1、保存到flash
這位問題看起來你已經解決了,const定義就可以了
2、賦初始值
為啥非得要C去給初始值啊,你用腳本寫一個初值不就行了么?很快,很簡單,perl,python都可以啊
回復

使用道具 舉報

15#
ID:248705 發表于 2022-7-27 10:46 | 只看該作者
大兄弟不會是想用flash當顯存叭,不可以哦
回復

使用道具 舉報

16#
ID:99525 發表于 2022-7-27 12:54 | 只看該作者
我怎么感覺你是想要存一副圖片呢
回復

使用道具 舉報

17#
ID:123289 發表于 2022-7-28 10:19 | 只看該作者
主導思想不合理。方針錯了,方法就沒有意義了。
回復

使用道具 舉報

18#
ID:824490 發表于 2022-7-28 11:28 | 只看該作者
關注一下!看看樓主是如何解決這個問題的。
回復

使用道具 舉報

19#
ID:58930 發表于 2022-7-28 11:50 | 只看該作者
那就是 flash編程啊,需要單獨的flash地址不要下載程序的地址和這個沖突,單獨的函數,程序開始的時候運行,把數組里面的數據進行編程,再進行讀取。
回復

使用道具 舉報

20#
ID:386442 發表于 2022-7-28 17:03 | 只看該作者
flash模擬eeprom的方法,先給扇區擦除在寫入數據就可以實現數據修改,還可以實現掉電保存~
回復

使用道具 舉報

21#
ID:73992 發表于 2022-7-28 22:08 | 只看該作者
hxdby 發表于 2022-7-24 23:33
換句話說,如果有來源,比如這7萬多個數據都整理好了,那我也不來這里提問了,我直接copy到我的代碼里就 ...

按你這么說,就不需要寫數據到falsh。程序直接現場給顯示屏賦值就可以了,你想用什么顏色就附什么值,不是更方便嗎
回復

使用道具 舉報

22#
ID:997026 發表于 2022-7-29 00:12 | 只看該作者
lyonkon 發表于 2022-7-28 22:08
按你這么說,就不需要寫數據到falsh。程序直接現場給顯示屏賦值就可以了,你想用什么顏色就附什么值,不 ...

說的沒錯,但是你沒看我前面的描述,我是想節省我的RAM,因為不寫到flash的話,定義的大數組是占用RAM的,而且我的RAM還有其他用途,不能占用太多,所以考慮把他放到flash里
回復

使用道具 舉報

23#
ID:997026 發表于 2022-7-29 00:14 | 只看該作者
yzwzfyz 發表于 2022-7-28 10:19
主導思想不合理。方針錯了,方法就沒有意義了。

不明白你在說什么?你可能沒有真正理解我在做什么?給LCD刷屏的顏色數據我想問問,你是怎么處理的?要放在哪里?flash還是RAM?怎么刷?總歸要有地方放吧?不明白你這莫名其妙的一句話什么意思,你有好的思想你提出來大家討論呀
回復

使用道具 舉報

24#
ID:997026 發表于 2022-7-29 00:18 | 只看該作者
祖國的花朵 發表于 2022-7-27 10:46
大兄弟不會是想用flash當顯存叭,不可以哦

顯存我一般用RAM來做,你用flash當顯存?看來你還得努力啊
回復

使用道具 舉報

25#
ID:401564 發表于 2022-7-29 07:00 | 只看該作者
lyonkon 發表于 2022-7-28 22:08
按你這么說,就不需要寫數據到falsh。程序直接現場給顯示屏賦值就可以了,你想用什么顏色就附什么值,不 ...

現場用SPI操作是不是還得拉高拉低CS線的?
是不是還來  SPI_Write(數據);那么一下呢?
這一來一去的,7萬多次,那得多花多少時間出來呢?
用Flash通過DMA寫入,基本就是什么事都不用干,主程序有很多時間去執行其它任務的
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 男女污污网站 | 美女天天操 | 久久精品aaa | 一区二区三区四区视频 | 日韩在线免费 | 久久99精品久久久久久秒播九色 | 亚洲精品一二区 | 黑人巨大精品欧美一区二区一视频 | 午夜天堂精品久久久久 | 国产精品久久久久一区二区三区 | 久草视频观看 | 日韩高清三区 | 欧美电影免费观看高清 | 久久午夜精品福利一区二区 | 亚洲精品无 | 国产一区二区av | 日韩性在线| 亚洲成在线观看 | 无码日韩精品一区二区免费 | 少妇特黄a一区二区三区88av | 中文字幕亚洲欧美日韩在线不卡 | 男人午夜视频 | 国产一区二区精品在线观看 | 中文无吗 | 久久精品国产一区二区三区不卡 | 中日韩毛片 | 亚洲三级免费看 | 国产一区二区三区网站 | 激情婷婷 | 亚洲国产精品久久 | 欧美日韩免费 | 欧美成年人 | 欧美黄色大片在线观看 | h视频免费在线观看 | 人人爽人人草 | 午夜小电影 | 精品亚洲一区二区三区四区五区 | 精品久久久久久久久久久 | 欧美一级淫片免费视频黄 | 香蕉婷婷 | 日本一区二区高清不卡 |