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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

全志D1程序燒錄失敗引發的向量指令的學習

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

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

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

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

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

問題解決
經高人指點,發現mstatus中的vs位在第一個線程啟動前被修改。

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

最終發現是在初始化線程的現場時被修改。

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;
}
上述代碼修改前,下載會觸發異常:

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

回到最初的問題:

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

到這還有個疑問:

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

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

向量指令
向量指令:單條指令操作多個數據,并行

使用場景:數據拷貝 用并行方式代替循環的方式

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

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

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

    關注

    112

    文章

    16434

    瀏覽量

    178972
  • 寄存器
    +關注

    關注

    31

    文章

    5363

    瀏覽量

    120914
  • 觸發器
    +關注

    關注

    14

    文章

    2002

    瀏覽量

    61284
  • RT-Thread
    +關注

    關注

    31

    文章

    1304

    瀏覽量

    40298
收藏 人收藏

    評論

    相關推薦

    平頭哥D1 DocK Pro開發板上手評測

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

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

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

    #科技 D1芯片 #開箱 視頻

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

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

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

    請問D1芯片如何對D1主頻進行調節?

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

    D1-H裸奔工具XFEL

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

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

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

    D1開發板RISCV64開箱評測

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

    符合Open Board規范的首款開發板科技D1哪吒開始正式發售

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

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

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

    D1和t113對比

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

    D1和h3的參數對比

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

    d1d1-h的區別

    d1d1-h的區別
    的頭像 發表于 08-17 11:28 ?2132次閱讀

    D1與f1c200s性能比較

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

    20210520定位圖D1哪吒開發板

    20210520定位圖D1哪吒開發板
    發表于 10-19 15:11 ?0次下載
    主站蜘蛛池模板: 日本最新在线不卡免费视频| 把腿张开再深点好爽宝贝| 国产亚洲精品成人AV久久| 亚洲精品无夜久久久久久久久 | 精品国产免费人成视频| 一个人免费视频在线观看| 美女脱18以下禁止看免费| jizz69女士第一次| 午夜天堂AV久久久噜噜噜| 久久婷婷五月综合色精品首页| 国产激情视频在线| 国精产品一区一区三区有限公司| 99久久婷婷国产综合精品青草| 日韩欧美一区二区三区在线| 国产亚洲精品久久无码98| 最新国产av.在线视频| 视频一区国产在线二区| 久久日本精品国产精品| 帝王受PLAY龙椅高肉NP| 亚洲中文字幕手机版| 青青草伊人久久| 精品国产成a人在线观看| BL低喘贯穿顶弄老师H| 亚洲精品福利在线| 欧洲xxxxx| 久久精品国产亚洲AV妓女不卡| 成人在线免费视频| 一本道综合久久免费| 三级中国免费的| 久久无码AV亚洲精品色午夜麻豆| 村妇偷人内射高潮迭起| 在线观看国产精选免费| 婷婷久久无码欧美人妻| 欧美 亚洲 日韩 中文2019| 国产亚洲视频中文字幕| bl撅高扒开臀缝哦| 一本道久久综合久久88| 性肥胖BWBWBW| 色婷婷亚洲五月| 嗯啊好爽视频| 精品夜夜澡人妻无码AV|