在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

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

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

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

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

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

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

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

于是在啟動第一個線程前,開始排查修改vs位的地方。

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

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;
}
上述代碼修改前,下載會觸發(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 */

為什么這么改?請看下文:

事情到這就清晰了,是因為沒有初始化向量指令控制位VS.

1.jpg

回到最初的問題:

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

到這還有個疑問:

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

一番操作過后,看看這個向量指令到底是個啥吧:

向量指令
向量指令:單條指令操作多個數(shù)據(jù),并行

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

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

#ifdef __riscv_vector
addi sp, sp, -(20+20)
csrr t0, vl // 記錄 矢量寄存器 能 處理的 數(shù)據(jù) 個數(shù)
sd t0, (0 +0 )(sp) // 備份
csrr t0, vtype // 描述 矢量寄存器 數(shù)據(jù) 類型
sd t0, (4 +4 )(sp) // 備份
csrr t0, vstart // 向量 起始 索引 向量指令 執(zhí)行 第一個元素 的 索引
sd t0, (8 +8 )(sp) // 備份
csrr t0, vxsat // 描述 運算 結(jié)果 是否 飽和
sd t0, (12 +12 )(sp) // 備份
csrr t0, vxrm // 舍入 模式 類似四舍五入的(略) 那種
sd t0, (16 +16 )(sp) // 備份
addi sp, sp, -(256+256)
vsetvli zero, zero, e8, m8 // 設(shè)置 數(shù)據(jù)寬度8(1字節(jié)) 8個向量寄存器為一組
vsb.v v0, (sp) //存儲V0 ~ V7 矢量寄存器數(shù)據(jù)至 內(nèi)存 存儲數(shù)量 (128:矢量寄存器寬度 / 8:數(shù)據(jù)寬度) * 8:矢量寄存器組中的矢量寄存器的個數(shù)
addi sp, sp, 128//
vsb.v v8, (sp) // 存儲V8 ~ V15
addi sp, sp, 128
vsb.v v16, (sp)// 存儲V16 ~ V23
addi sp, sp, 128
vsb.v v24, (sp)// 存儲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:矢量寄存器組中的矢量寄存器的個數(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é)生,不住之處請多多指教.

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

    關(guān)注

    112

    文章

    16419

    瀏覽量

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

    關(guān)注

    31

    文章

    5359

    瀏覽量

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

    關(guān)注

    14

    文章

    2000

    瀏覽量

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

    關(guān)注

    31

    文章

    1302

    瀏覽量

    40268
收藏 人收藏

    評論

    相關(guān)推薦

    平頭哥D1 DocK Pro開發(fā)板上手評測

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

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

    Linux 的開發(fā)板一起推出的D1 RISC-V 處理器的低成本版,它和D1的主要區(qū)別在于D1s內(nèi)置的RAM是 64MB DDR2。
    的頭像 發(fā)表于 12-04 18:22 ?1409次閱讀
    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開發(fā)板

    #科技 D1芯片 #開箱 視頻

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

    如何解決D1 SDK附帶的g++不支持RVV的問題?

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

    請問D1芯片如何對D1主頻進行調(diào)節(jié)?

    D1項目開發(fā)的過程中,有時候需要調(diào)節(jié)CPU主頻,以對一些場景、功耗或性能進行測試,那么D1芯片如何對D1主頻進行調(diào)節(jié)?
    發(fā)表于 12-29 06:20

    D1-H裸奔工具XFEL

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

    如何解決D1 SDK附帶的g++不支持RVV的問題?

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

    D1開發(fā)板RISCV64開箱評測

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

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

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

    D1芯片的啟動流程最底層分析

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

    D1和t113對比

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

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

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

    d1d1-h的區(qū)別

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

    D1與f1c200s性能比較

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

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

    20210520定位圖D1哪吒開發(fā)板
    發(fā)表于 10-19 15:11 ?0次下載
    主站蜘蛛池模板: 特黄黄三级视频在线观看| 亚洲你懂的| 欧美最猛黑人xxxx黑人猛交69| 狼人狠狠干| 国产精品久久久久久久久久免费| 三及毛片| 伊人久久综合网亚洲| 亚洲视频第一页| 日本卡一卡2卡3卡4精品卡无人区| 美妇乱人伦性| 在线播放黄色网址| 国产性夜夜春夜夜爽| 2021久久精品国产99国产| mmmxxx69日本| 免费看18污黄| 婷婷了五月色香综合缴情| 拍拍拍无挡视频免费全程1000| 精品国产成人系列| 影音先锋五月天| 男子扒开美女尿口做羞羞的事| 午夜黄色网址| 99在线热播精品免费| 日本精品一卡二卡≡卡四卡| 经典三级四虎在线观看| 6969精品视频在线观看| 黄色拍拍拍| 日本亚洲视频| 特黄特黄视频| 韩国免费特一级毛片| 天天草夜夜草| 欧美另类bbw| 免费黄色大片在线观看| 这里只有精品视频| 欧美性猛交xxxxbbbb| 欧美性生活网址| 操你啦在线视频| 国产在线视频www色| 欧美视频不卡一区二区三区| 网站毛片| 高清毛片一区二区三区| 久久人人网|