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

標(biāo)題: C語(yǔ)言如何把一個(gè)超大數(shù)組賦值后存放到FLASH中? [打印本頁(yè)]

作者: hxdby    時(shí)間: 2022-7-24 10:03
標(biāo)題: C語(yǔ)言如何把一個(gè)超大數(shù)組賦值后存放到FLASH中?
我的FLASH空間比較大,有512K,RAM空間也比較大,接近200K,但是RAM由于還要做其他用途,所以現(xiàn)在需要把一個(gè)超大數(shù)組保存到FLASH中。
現(xiàn)在有一個(gè)超大數(shù)組:

uint16_t   databuffer[240][320],

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

這么大的數(shù)組怎么給他賦初值?不可能用大括號(hào)的方式,databuffer[240][320]={0xFFFF, 0x32A3........},  7萬(wàn)多個(gè)數(shù)據(jù),寫(xiě)到猴年馬月也寫(xiě)不完啊。

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

誰(shuí)能解決這個(gè)矛盾?

作者: xuyaqi    時(shí)間: 2022-7-24 14:02
編程時(shí)數(shù)組直接賦值放FLASH中。
作者: lkc8210    時(shí)間: 2022-7-24 15:22
你的7萬(wàn)多個(gè)數(shù)據(jù)是有來(lái)源的吧?Excel?SQL?CSV?
利用這些來(lái)源生成一個(gè)
uint16_t code databuffer[240][320] = {......};儲(chǔ)存到DtatTable.h內(nèi)就可以了
作者: hxdby    時(shí)間: 2022-7-24 17:13
lkc8210 發(fā)表于 2022-7-24 15:22
你的7萬(wàn)多個(gè)數(shù)據(jù)是有來(lái)源的吧?Excel?SQL?CSV?
利用這些來(lái)源生成一個(gè)
uint16_t code databuffer[240][ ...

沒(méi)有來(lái)源,,這些數(shù)據(jù)是LCD的顏色數(shù)據(jù),平時(shí)我是用for循環(huán)直接賦值,賦值后直接使用。因?yàn)轭伾珨?shù)據(jù)我要用的時(shí)候直接for循環(huán)賦值就可以了,所以沒(méi)必要整成一個(gè)excel. 所以這算不算C語(yǔ)言的一個(gè)缺陷,大數(shù)組的初始化非常不方便,,,,,,只能直接大括號(hào)內(nèi)寫(xiě)。。。
作者: hxdby    時(shí)間: 2022-7-24 17:15
xuyaqi 發(fā)表于 2022-7-24 14:02
編程時(shí)數(shù)組直接賦值放FLASH中。

我這個(gè)大數(shù)組是為了LCD初始化的時(shí)候,DMA直接從數(shù)據(jù)讀數(shù)據(jù)刷屏幕,,,因?yàn)檫@些數(shù)據(jù)基本不涉及到改動(dòng),所以考慮放FLASH中,請(qǐng)問(wèn)編程時(shí)直接賦值怎么能放FLASH中?7萬(wàn)多個(gè)數(shù)據(jù)要一個(gè)一個(gè)寫(xiě)嗎?
作者: Y_G_G    時(shí)間: 2022-7-24 21:17
能用for循環(huán)直接賦值,這個(gè)數(shù)據(jù)是固定的嗎?或者是有規(guī)律的?不知道這是什么意思,沒(méi)有用過(guò)LCD不知道
在FLASH開(kāi)辟某個(gè)地址,比如0000H存放一個(gè)標(biāo)志位
程序啟動(dòng)先讀取這個(gè)標(biāo)志位,如果沒(méi)有標(biāo)志,就用for循環(huán)寫(xiě)入FLASH,寫(xiě)完之后置位標(biāo)志位并保存,這樣,這你所謂的7萬(wàn)多個(gè)數(shù)據(jù)就保存在FLASH了
如果已經(jīng)標(biāo)志了,就不用寫(xiě)入了,跳過(guò)寫(xiě)入這一步
下一步就是讀取FLASH中的數(shù)據(jù),初始化LCD
這樣就達(dá)到了每次開(kāi)機(jī)都能通過(guò)讀取FLASH來(lái)完成初始化了
不知道這行不行得通
作者: Hephaestus    時(shí)間: 2022-7-24 22:26
7萬(wàn)個(gè)數(shù)據(jù)怎么可能沒(méi)有來(lái)源?總不能是隨手瞎寫(xiě)的吧?
作者: hxdby    時(shí)間: 2022-7-24 23:21
Hephaestus 發(fā)表于 2022-7-24 22:26
7萬(wàn)個(gè)數(shù)據(jù)怎么可能沒(méi)有來(lái)源?總不能是隨手瞎寫(xiě)的吧?

我說(shuō)的沒(méi)有來(lái)源指的是沒(méi)有把這7萬(wàn)多個(gè)數(shù)據(jù)匯總成一個(gè)EXCEL表格隨時(shí)調(diào)用,我是這么用的,我現(xiàn)在的LCD是320x240的分辨率,所以像素是320x240=76800個(gè),用的是RGB565顏色,所以一個(gè)像素需要用16bit的數(shù)據(jù)刷顏色,這個(gè)數(shù)據(jù)量太大,只能用DMA去連續(xù)搬運(yùn)同一個(gè)顏色,比如這個(gè)顏色是0xFFFF, 所以我的用法是,

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

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


所以用法很簡(jiǎn)單,只是for循環(huán)把一個(gè)顏色數(shù)據(jù)賦值給大數(shù)組,然后DMA根據(jù)數(shù)組地址連續(xù)搬運(yùn)。
所以沒(méi)什么來(lái)源,只是賦值而已。
作者: hxdby    時(shí)間: 2022-7-24 23:23
Y_G_G 發(fā)表于 2022-7-24 21:17
能用for循環(huán)直接賦值,這個(gè)數(shù)據(jù)是固定的嗎?或者是有規(guī)律的?不知道這是什么意思,沒(méi)有用過(guò)LCD不知道
在FLASH ...

數(shù)據(jù)是固定的,就是LCD的顏色數(shù)據(jù),也就是一個(gè)RGB565顏色,16bit,2個(gè)字節(jié),比如OXFFFF,就是要把這個(gè)0XFFFF寫(xiě)入到這個(gè)大數(shù)組,簡(jiǎn)單說(shuō)就是寫(xiě)76800次0XFFFF。
這樣做主要是為了DMA從數(shù)組搬運(yùn)顏色刷整個(gè)屏幕,這樣的方法速度最快。

你這個(gè)方法我也想過(guò),目前看來(lái),好像也沒(méi)別的方法了。
作者: hxdby    時(shí)間: 2022-7-24 23:33
Hephaestus 發(fā)表于 2022-7-24 22:26
7萬(wàn)個(gè)數(shù)據(jù)怎么可能沒(méi)有來(lái)源?總不能是隨手瞎寫(xiě)的吧?

換句話說(shuō),如果有來(lái)源,比如這7萬(wàn)多個(gè)數(shù)據(jù)都整理好了,那我也不來(lái)這里提問(wèn)了,我直接copy到我的代碼里就好了。現(xiàn)在是沒(méi)有來(lái)源,而且我這個(gè)數(shù)據(jù)是固定的一個(gè)值,因?yàn)檫@是刷LCD的顏色值作為全屏畫(huà)布用,不是你想的那種整理好的數(shù)據(jù),顏色值就是一個(gè)固定值,我要刷什么顏色就賦什么值到大數(shù)組,所以用for循環(huán)就好了。

作者: 188610329    時(shí)間: 2022-7-25 00:03
hxdby 發(fā)表于 2022-7-24 23:23
數(shù)據(jù)是固定的,就是LCD的顏色數(shù)據(jù),也就是一個(gè)RGB565顏色,16bit,2個(gè)字節(jié),比如OXFFFF,就是要把這個(gè)0XF ...

所以,為什么一定要DMA搬運(yùn)數(shù)組呢? 直接刷76800次不比從數(shù)組搬運(yùn)更快么? 中斷里做一個(gè)刷屏標(biāo)志,做一個(gè)底色變量,以及計(jì)數(shù),只要刷屏標(biāo)志被置位,就不停的刷指定的底色,直到計(jì)數(shù)滿(mǎn)76800次結(jié)束,然后清刷屏標(biāo)志,感覺(jué)這樣比搬運(yùn)數(shù)組到DMA,然后DMA自動(dòng)刷屏效率要高啊。
作者: Y_G_G    時(shí)間: 2022-7-25 00:58
188610329 發(fā)表于 2022-7-25 00:03
所以,為什么一定要DMA搬運(yùn)數(shù)組呢? 直接刷76800次不比從數(shù)組搬運(yùn)更快么? 中斷里做一個(gè)刷屏標(biāo)志,做一個(gè) ...

DMA不需要做什么的呀,設(shè)定好初始化就可以了,SPI的DMA操作是不用占用主程序時(shí)間的
肯定要快一點(diǎn)了
直接寫(xiě)入76800次,不管是用中斷還是等待,每次寫(xiě)入完成,你就得清除中斷標(biāo)志位,中斷返回,大概要1uS吧
那76800次就要多花76800uS=76.8mS
DMA就不需要多花這76.8mS了,程序只要處理DMA傳輸完成之后的幾個(gè)操作而已
作者: hxdby    時(shí)間: 2022-7-25 01:25
188610329 發(fā)表于 2022-7-25 00:03
所以,為什么一定要DMA搬運(yùn)數(shù)組呢? 直接刷76800次不比從數(shù)組搬運(yùn)更快么? 中斷里做一個(gè)刷屏標(biāo)志,做一個(gè) ...

你這種方法在實(shí)際LCD刷屏中是行不通的,主要是沒(méi)考慮SPI的速率,SPI的頻率一般很低,如果用你這種方法,SPI每次只能傳輸一幀數(shù)據(jù),每傳輸一幀需要拉低拉高片選一次,這中間拉低拉高片選的時(shí)間加上SPI的低速都?jí)蚰闶艿牧耍鳧MA的好處是只需拉低一次片選,中間可以靠DMA連續(xù)無(wú)停頓的搬運(yùn)76800次,就像打%%%一樣的,搬完了拉高片選結(jié)束。當(dāng)然前提是SPI的速度不能太低,太低了,DMA也沒(méi)用,但如果不用DMA,大概率直接刷屏的速度是不可能提上來(lái)的。我板子都做出來(lái)了,現(xiàn)在DMA刷屏速度杠杠的
作者: 260189914    時(shí)間: 2022-7-25 18:11
兩個(gè)問(wèn)題:
1、保存到flash
這位問(wèn)題看起來(lái)你已經(jīng)解決了,const定義就可以了
2、賦初始值
為啥非得要C去給初始值啊,你用腳本寫(xiě)一個(gè)初值不就行了么?很快,很簡(jiǎn)單,perl,python都可以啊
作者: 的花朵    時(shí)間: 2022-7-27 10:46
大兄弟不會(huì)是想用flash當(dāng)顯存叭,不可以哦
作者: 雪玉寐影    時(shí)間: 2022-7-27 12:54
我怎么感覺(jué)你是想要存一副圖片呢
作者: yzwzfyz    時(shí)間: 2022-7-28 10:19
主導(dǎo)思想不合理。方針錯(cuò)了,方法就沒(méi)有意義了。
作者: 名字不是重點(diǎn)    時(shí)間: 2022-7-28 11:28
關(guān)注一下!看看樓主是如何解決這個(gè)問(wèn)題的。
作者: tuohang2012    時(shí)間: 2022-7-28 11:50
那就是 flash編程啊,需要單獨(dú)的flash地址不要下載程序的地址和這個(gè)沖突,單獨(dú)的函數(shù),程序開(kāi)始的時(shí)候運(yùn)行,把數(shù)組里面的數(shù)據(jù)進(jìn)行編程,再進(jìn)行讀取。
作者: 神話A小王子    時(shí)間: 2022-7-28 17:03
flash模擬eeprom的方法,先給扇區(qū)擦除在寫(xiě)入數(shù)據(jù)就可以實(shí)現(xiàn)數(shù)據(jù)修改,還可以實(shí)現(xiàn)掉電保存~
作者: lyonkon    時(shí)間: 2022-7-28 22:08
hxdby 發(fā)表于 2022-7-24 23:33
換句話說(shuō),如果有來(lái)源,比如這7萬(wàn)多個(gè)數(shù)據(jù)都整理好了,那我也不來(lái)這里提問(wèn)了,我直接copy到我的代碼里就 ...

按你這么說(shuō),就不需要寫(xiě)數(shù)據(jù)到falsh。程序直接現(xiàn)場(chǎng)給顯示屏賦值就可以了,你想用什么顏色就附什么值,不是更方便嗎
作者: hxdby    時(shí)間: 2022-7-29 00:12
lyonkon 發(fā)表于 2022-7-28 22:08
按你這么說(shuō),就不需要寫(xiě)數(shù)據(jù)到falsh。程序直接現(xiàn)場(chǎng)給顯示屏賦值就可以了,你想用什么顏色就附什么值,不 ...

說(shuō)的沒(méi)錯(cuò),但是你沒(méi)看我前面的描述,我是想節(jié)省我的RAM,因?yàn)椴粚?xiě)到flash的話,定義的大數(shù)組是占用RAM的,而且我的RAM還有其他用途,不能占用太多,所以考慮把他放到flash里
作者: hxdby    時(shí)間: 2022-7-29 00:14
yzwzfyz 發(fā)表于 2022-7-28 10:19
主導(dǎo)思想不合理。方針錯(cuò)了,方法就沒(méi)有意義了。

不明白你在說(shuō)什么?你可能沒(méi)有真正理解我在做什么?給LCD刷屏的顏色數(shù)據(jù)我想問(wèn)問(wèn),你是怎么處理的?要放在哪里?flash還是RAM?怎么刷?總歸要有地方放吧?不明白你這莫名其妙的一句話什么意思,你有好的思想你提出來(lái)大家討論呀
作者: hxdby    時(shí)間: 2022-7-29 00:18
祖國(guó)的花朵 發(fā)表于 2022-7-27 10:46
大兄弟不會(huì)是想用flash當(dāng)顯存叭,不可以哦

顯存我一般用RAM來(lái)做,你用flash當(dāng)顯存?看來(lái)你還得努力啊
作者: Y_G_G    時(shí)間: 2022-7-29 07:00
lyonkon 發(fā)表于 2022-7-28 22:08
按你這么說(shuō),就不需要寫(xiě)數(shù)據(jù)到falsh。程序直接現(xiàn)場(chǎng)給顯示屏賦值就可以了,你想用什么顏色就附什么值,不 ...

現(xiàn)場(chǎng)用SPI操作是不是還得拉高拉低CS線的?
是不是還來(lái)  SPI_Write(數(shù)據(jù));那么一下呢?
這一來(lái)一去的,7萬(wàn)多次,那得多花多少時(shí)間出來(lái)呢?
用Flash通過(guò)DMA寫(xiě)入,基本就是什么事都不用干,主程序有很多時(shí)間去執(zhí)行其它任務(wù)的




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产精品乱码一二三区的特点 | 日韩av一区二区在线观看 | 2018天天干天天操 | 黄色免费看 | 午夜国产 | 国产日韩欧美一区 | 91精品国产一区二区三区 | 蜜臀久久99精品久久久久久宅男 | 免费精品| 欧美一区二区三区在线观看 | 日韩高清www | 亚洲国产精品久久久久秋霞不卡 | 国产一区二区久久久 | 污视频在线免费观看 | 成人日韩av | 欧美精品片 | 久久91av | 91精品国产91久久久久久吃药 | 日韩成人在线视频 | 先锋资源在线 | 欧美成人h版在线观看 | 狠狠做深爱婷婷综合一区 | 91最新视频 | 国产欧美二区 | 国产精品成人一区 | 一级黄色片一级黄色片 | 免费同性女女aaa免费网站 | 狠狠的干| 成人精品久久 | 91精品国产综合久久久久久漫画 | 国产激情亚洲 | 国产精品日日摸夜夜添夜夜av | 九色91视频 | 视频在线一区二区 | 久久er99热精品一区二区 | 欧美不卡视频 | www.色综合 | 99久久精品免费 | 亚洲精品久久久一区二区三区 | 欧美视频三区 | 视频1区2区 |