色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

全志D1程序燒錄失敗引發(fā)的向量指令的學(xué)習(xí)

冬至子 ? 來(lái)源:牧塵 ? 作者:牧塵 ? 2023-09-13 16:12 ? 次閱讀

前一段時(shí)間遇到給D1下載程序觸發(fā)異常的問(wèn)題。研究許久無(wú)果,多日后終得解決。

問(wèn)題
使用全志提供的命令下載的方式,若在第一個(gè)線程啟動(dòng)前不做停止操作(添加while(1),延時(shí))等操作,使用該種方式下載會(huì)觸發(fā)異常。

使用全志PhoenixSuit工具下載不會(huì)觸發(fā)異常。

問(wèn)題定位
最終問(wèn)題出現(xiàn)定位在第一個(gè)線程啟動(dòng)前。可惜水平有限,還是沒(méi)找到原因。

問(wèn)題解決
經(jīng)高人指點(diǎn),發(fā)現(xiàn)mstatus中的vs位在第一個(gè)線程啟動(dòng)前被修改。

于是在啟動(dòng)第一個(gè)線程前,開(kāi)始排查修改vs位的地方。

最終發(fā)現(xiàn)是在初始化線程的現(xiàn)場(chǎng)時(shí)被修改。

rt_uint8_t *rt_hw_stack_init(void *tentry,
void *parameter,
rt_uint8_t *stack_addr,
void *texit)
{
struct rt_hw_stack_frame *frame;
rt_uint8_t *stk;
int i;
extern int __global_pointer$;
stk = stack_addr + sizeof(rt_ubase_t);
stk = (rt_uint8_t *)RT_ALIGN_DOWN((rt_ubase_t)stk, REGBYTES);
stk -= sizeof(struct rt_hw_stack_frame);
frame = (struct rt_hw_stack_frame *)stk;
for (i = 0; i < sizeof(struct rt_hw_stack_frame) / sizeof(rt_ubase_t); i++)
{
((rt_ubase_t )frame)[i] = i;
}
frame->ra = (rt_ubase_t)texit;
frame->gp = (rt_ubase_t)&__global_pointer$;
frame->a0 = (rt_ubase_t)parameter;
frame->epc = (rt_ubase_t)tentry;
frame->x2 = (rt_ubase_t)stk;
/
force to supervisor mode(SPP=1) and set SPIE and SUM to 1 /
#ifdef ENABLE_FPU
frame->mstatus = MSTATUS_VS| MSTATUS_PUM | MSTATUS_FS | MSTATUS_MPP | MSTATUS_MPIE; /
enable FPU */
#else
frame->mstatus = MSTATUS_PUM | MSTATUS_MPP | MSTATUS_MPIE;
#endif
return stk;
}
上述代碼修改前,下載會(huì)觸發(fā)異常:

frame- >mstatus = MSTATUS_PUM | MSTATUS_FS | MSTATUS_MPP | MSTATUS_MPIE;    /* enable FPU */

修改后,下載正常:

frame- >mstatus = MSTATUS_VS| MSTATUS_PUM | MSTATUS_FS | MSTATUS_MPP | MSTATUS_MPIE;    /* enable FPU */

為什么這么改?請(qǐng)看下文:

事情到這就清晰了,是因?yàn)闆](méi)有初始化向量指令控制位VS.

1.jpg

回到最初的問(wèn)題:

下載主要的操作就是數(shù)據(jù)拷貝,使用向量指令拷貝會(huì)大大加速下載速度,所以全志的下載算法會(huì)使用向量指令去拷貝,這里沒(méi)有初始化VS,當(dāng)然會(huì)觸發(fā)異常了。

到這還有個(gè)疑問(wèn):

mstatus的vs在用戶程序中修改的,這里按道理已經(jīng)在用戶程序了,整么還在下載,這個(gè)問(wèn)題就不得而知了,你知道嗎,反正我不知道

一番操作過(guò)后,看看這個(gè)向量指令到底是個(gè)啥吧:

向量指令
向量指令:?jiǎn)螚l指令操作多個(gè)數(shù)據(jù),并行

使用場(chǎng)景:數(shù)據(jù)拷貝 用并行方式代替循環(huán)的方式

向量指令使用舉例:
一段上下文切換中的代碼:

#ifdef __riscv_vector
addi sp, sp, -(20+20)
csrr t0, vl // 記錄 矢量寄存器 能 處理的 數(shù)據(jù) 個(gè)數(shù)
sd t0, (0 +0 )(sp) // 備份
csrr t0, vtype // 描述 矢量寄存器 數(shù)據(jù) 類(lèi)型
sd t0, (4 +4 )(sp) // 備份
csrr t0, vstart // 向量 起始 索引 向量指令 執(zhí)行 第一個(gè)元素 的 索引
sd t0, (8 +8 )(sp) // 備份
csrr t0, vxsat // 描述 運(yùn)算 結(jié)果 是否 飽和
sd t0, (12 +12 )(sp) // 備份
csrr t0, vxrm // 舍入 模式 類(lèi)似四舍五入的(略) 那種
sd t0, (16 +16 )(sp) // 備份
addi sp, sp, -(256+256)
vsetvli zero, zero, e8, m8 // 設(shè)置 數(shù)據(jù)寬度8(1字節(jié)) 8個(gè)向量寄存器為一組
vsb.v v0, (sp) //存儲(chǔ)V0 ~ V7 矢量寄存器數(shù)據(jù)至 內(nèi)存 存儲(chǔ)數(shù)量 (128:矢量寄存器寬度 / 8:數(shù)據(jù)寬度) * 8:矢量寄存器組中的矢量寄存器的個(gè)數(shù)
addi sp, sp, 128//
vsb.v v8, (sp) // 存儲(chǔ)V8 ~ V15
addi sp, sp, 128
vsb.v v16, (sp)// 存儲(chǔ)V16 ~ V23
addi sp, sp, 128
vsb.v v24, (sp)// 存儲(chǔ)V24 ~ V31
addi sp, sp, -(256+256-128)
#endif
la t2, do_irq// 處理中斷
jalr t2
#ifdef __riscv_vector
vsetvli zero, zero, e8, m8 // 采用與之前同樣的配置方式
vlb.v v0, (sp)
addi sp, sp, 128//拷貝V0 ~ V7 內(nèi)存 至矢量寄存器數(shù) 拷貝數(shù)量 (128:矢量寄存器寬度 / 8:數(shù)據(jù)寬度) * 8:矢量寄存器組中的矢量寄存器的個(gè)數(shù)
vlb.v v8, (sp)
addi sp, sp, 128//拷貝V8 ~ V15
vlb.v v16, (sp)
addi sp, sp, 128//拷貝V16 ~ V23
vlb.v v24, (sp)
addi sp, sp, 128//拷貝V24 ~ V31
lwu t0, (0 +0)(sp)// 加載 vl
lwu t1, (4 +4)(sp)// 加載 vtype
lwu t2, (8 +8)(sp)// 加載 vstart
vsetvl zero, t0, t1 // 重新設(shè)置 vl vtype
csrw vstart, t2// 加載 vstart
lwu t2, (12 +12)(sp)
csrw vxsat, t2 // 加載 vxsat
lwu t2, (16 +16)(sp)
csrw vxrm, t2 // 加載 vxrm
addi sp, sp, (20+20)
#endif
RISC-V小學(xué)生,不住之處請(qǐng)多多指教.

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 控制器
    +關(guān)注

    關(guān)注

    112

    文章

    16395

    瀏覽量

    178482
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5357

    瀏覽量

    120622
  • 觸發(fā)器
    +關(guān)注

    關(guān)注

    14

    文章

    2000

    瀏覽量

    61212
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1293

    瀏覽量

    40228
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    平頭哥D1 DocK Pro開(kāi)發(fā)板上手評(píng)測(cè)

    Lichee RV Dock是志在線AWOL聯(lián)合深圳矽速科技sipeed推出的一款基于珠海D1 CPU的單板計(jì)算機(jī),其主控
    的頭像 發(fā)表于 07-14 15:02 ?1195次閱讀
    平頭哥<b class='flag-5'>D1</b> DocK Pro開(kāi)發(fā)板上手評(píng)測(cè)

    Made with KiCad(十六):RISC-V 64 SoC F133/D1s開(kāi)發(fā)板

    Linux 的開(kāi)發(fā)板一起推出的D1 RISC-V 處理器的低成本版,它和D1的主要區(qū)別在于D1s內(nèi)置的RAM是 64MB DDR2。
    的頭像 發(fā)表于 12-04 18:22 ?1207次閱讀
    Made with KiCad(十六):<b class='flag-5'>全</b><b class='flag-5'>志</b>RISC-V 64 SoC F133/<b class='flag-5'>D1</b>s開(kāi)發(fā)板

    #科技 D1芯片 #開(kāi)箱 視頻

    whycan暈哥
    發(fā)布于 :2022年09月23日 22:28:46

    如何解決D1 SDK附帶的g++不支持RVV的問(wèn)題?

    我在使用D1 SDK交叉編譯OpenCV時(shí)遇到下面提示:Performing Test HAVE_CPU_RVV_SUPPORT (check file: cmake/checks
    發(fā)表于 12-28 06:29

    請(qǐng)問(wèn)D1芯片如何對(duì)D1主頻進(jìn)行調(diào)節(jié)?

    D1項(xiàng)目開(kāi)發(fā)的過(guò)程中,有時(shí)候需要調(diào)節(jié)CPU主頻,以對(duì)一些場(chǎng)景、功耗或性能進(jìn)行測(cè)試,那么D1芯片如何對(duì)D1主頻進(jìn)行調(diào)節(jié)?
    發(fā)表于 12-29 06:20

    D1-H裸奔工具XFEL

    工欲善其事,必先利其器,D1沿用傳統(tǒng)設(shè)計(jì)思路,brom里面集成了FEL模式,這個(gè)模式是一個(gè)很有用的模式,可以燒錄,測(cè)試,能干的事情很多,本來(lái)這種工具也是有成熟的可用,比如:sunx
    發(fā)表于 03-14 16:48

    如何解決D1 SDK附帶的g++不支持RVV的問(wèn)題?

    我在使用D1 SDK交叉編譯OpenCV時(shí)遇到下面提示:Performing Test HAVE_CPU_RVV_SUPPORT (check file: cmake/checks
    發(fā)表于 03-29 19:15

    D1開(kāi)發(fā)板RISCV64開(kāi)箱評(píng)測(cè)

    /perf-abc-risc-v-soc-board 還有awol的社區(qū)也很多相關(guān)的資料 https://bbs.aw-ol.com/category/6/d1 但是對(duì)于底層編程來(lái)說(shuō),關(guān)鍵的芯片手冊(cè),寄存器手冊(cè),還是很關(guān)鍵。
    發(fā)表于 08-16 07:05

    符合Open Board規(guī)范的首款開(kāi)發(fā)板科技D1哪吒開(kāi)始正式發(fā)售

    近日,符合Open Board規(guī)范的第一款開(kāi)發(fā)板——科技D1哪吒開(kāi)始正式線上發(fā)售。 ? 該開(kāi)發(fā)板由科技全資子公司
    的頭像 發(fā)表于 05-25 10:06 ?4050次閱讀

    D1芯片的啟動(dòng)流程最底層分析

    關(guān)于d1哪吒開(kāi)發(fā)板的啟動(dòng)流程分析 1.本文概述 2.D1上電后啟動(dòng)的第一個(gè)程序 3.啟動(dòng)SPL 4.啟動(dòng)opensbi 5.裸機(jī)程序的編寫(xiě)
    的頭像 發(fā)表于 06-15 17:44 ?8792次閱讀

    D1和t113對(duì)比

    D1和t113對(duì)比 D1和t113是兩款非常常見(jiàn)的芯片,比較輕巧,適合需要輕松搭建系統(tǒng)的
    的頭像 發(fā)表于 08-17 11:28 ?3783次閱讀

    D1和h3的參數(shù)對(duì)比

    D1和h3的參數(shù)對(duì)比 科技旗下的D1和H3是兩款熱門(mén)的芯片,也是家庭智能終端產(chǎn)品中常見(jiàn)的
    的頭像 發(fā)表于 08-17 11:28 ?2940次閱讀

    d1d1-h的區(qū)別

    d1d1-h的區(qū)別
    的頭像 發(fā)表于 08-17 11:28 ?2081次閱讀

    D1與f1c200s性能比較

    D1與f1c200s性能比較 D1和f
    的頭像 發(fā)表于 08-17 11:28 ?4497次閱讀

    20210520定位圖D1哪吒開(kāi)發(fā)板

    20210520定位圖D1哪吒開(kāi)發(fā)板
    發(fā)表于 10-19 15:11 ?0次下載
    主站蜘蛛池模板: 高清观看ZSHH96的视频素材| 欧美高清videos 360p| 娇妻让壮男弄的流白浆| 老师的快感电影完整版| 日本50人群体交乱| 亚洲乱码爆乳精品成人毛片| 99视频免视看| 国产欧美一本道无码| 美女医生深夜在家裸睡惨死| 受喷汁红肿抽搐磨NP双性| 伊人亚洲AV久久无码精品| 被室友C哭调教双性| 精品国产乱码久久久久久软件| 欧洲精品不卡1卡2卡三卡四卡| 亚洲国产av| A级毛片高清免费网站不卡| 国产在线中文字幕| 欧美eee114| 亚洲在线无码免费观看| 超碰在线线公开免费视频| 久久99国产精品无码AV| 色色色久久久免费视频| 综合伊人久久| 国产午夜精品久久理论片| 欧美性暴力变态xxxx| 一本之道高清www在线观看| 宫交拔不出来了h黑人| 老司机无码精品A| 亚洲AV国产福利精品在现观看| fyeex性欧美人与曾| 久久a在线视频观看| 双腿被绑成M型调教PLAY照片| 综合久久伊人| 果冻传媒2021一二三区| 日韩少妇爆乳无码专区| 2012中文字幕在线动漫电影| 国产在线精品亚洲一品区| 日本在线高清不卡免费播放| 51xx午夜影视福利| 精品动漫国产亚洲AV在线观看| 四虎永久在线精品国产|