方式1:内联汇编,所以跟C编译器有关,有些编译器可能会不支持(每种编译器内联汇编的形式都不一样),本代码在MDK的“defaul compiler version 6”编译器里测试通过。
uint32_t core_res_c; void set_core_res(uint32_t value) //设置内核寄存器 { core_res_c=value; __ASM("ldr r0,=core_res_c"); __ASM("ldr sp,[r0]"); } void set_special_res(uint32_t value) //设置内核特殊寄存器(PSR/CONTROL) { core_res_c=value; __ASM("ldr r0,=core_res_c"); __ASM("ldr r1,[r0]"); __ASM("msr control,r1"); } uint32_t read_core_res(void) //读内核寄存器 { __ASM("ldr r0,=core_res_c"); __ASM("str sp,[r0]"); return core_res_c; } uint32_t read_special_res(void) //读内核特殊寄存器 { __ASM("ldr r0,=core_res_c"); __ASM("mrs r1,control"); __ASM("str r1,[r0]"); return core_res_c; }
可以发现每一个函数都用到了“ldr r0,=core_res_c”这句话,这句话可以非常神奇的将core_res_c全局变量的地址传递给内核寄存器,就相当于建立了一个C和汇编直接数据传输的通道,我们就可以借助这个通道对内核寄存器进行读写了,当然这个通道的存在是借助于编译器的,所以文章第一句话就声明了和编译器的瓜葛。
读写内核寄存器和内核特殊寄存器分属不同的函数,主要是由于内核特殊寄存器的读写要借助于专有的MRS和MSR指令。
方式2:下面介绍一种使用纯汇编方式读写内核寄存器的方式,不再受到编译器的限制,移植性大大提高
先写4个汇编函数:
set_coreres PROC EXPORT set_coreres PUSH {R0,LR} MOV SP,R0 POP {R0,PC} ENDP set_specialres PROC EXPORT set_specialres PUSH {R0,LR} MSR CONTROL,R0 POP {R0,PC} ENDP read_coreres PROC EXPORT read_coreres PUSH {R0,LR} STR SP,[R0] POP {R0,PC} ENDP read_specialres PROC EXPORT read_specialres PUSH {R0,R1,LR} MRS R1,PSR STR R1,[R0] POP {R0,R1,PC} ENDP
再在C当中extern:
extern void set_coreres(int resvl); extern void set_specialres(int resvl); extern void read_coreres(int *resvl); extern void read_specialres(int *resvl);
最后再正常调用就行了~
猜你喜欢
- 16天前(哈弗h9优惠9万是真的吗)热浪来袭,哈弗H9超值补贴火热加码
- 16天前(夏日旅行海报)夏日旅行|精简行囊 向快乐进发
- 16天前(屿见不一样是哪个酒店)屿见白纱,遇见自己 “佳能PhotoGirls屿见白纱”摄影派对玩转海岛
- 16天前(“为人民绽放——国家艺术基金优秀剧目展演”在合肥开幕)“为人民绽放——国家艺术基金优秀剧目展演”在合肥开幕
- 16天前(纳米比亚旅游报价)纳米比亚旅游局2024年中国推介会圆满落幕
- 16天前(马尔代夫华尔道夫酒店多少钱)Chef Zhao就任马尔代夫伊挞富士岛华尔道夫酒店Li Long中餐厅新主厨
- 16天前(澳涞坞是什么)从本土品牌到全球舞台:澳涞山庄获国际顶级产业资源加持
- 16天前(岭南东方大酒店)粤西成势 | 阳江阳春长兴岭南东方酒店正式签约,粤西文旅再添明珠
- 16天前(星级饭店的发展困境)星级饭店转型之路:从市场逻辑到行业实践的深度探索
- 16天前(上海迪士尼 夏天)酷爽夏日,奇妙相伴!来上海迪士尼度假区清凉入夏
网友评论
- 搜索
- 最新文章
- (2020广州车展哈弗)你的猛龙 独一无二 哈弗猛龙广州车展闪耀登场
- (哈弗新能源suv2019款)智能科技颠覆出行体验 哈弗重塑新能源越野SUV价值认知
- (2021款全新哈弗h5自动四驱报价)新哈弗H5再赴保障之旅,无惧冰雪护航哈弗全民电四驱挑战赛
- (海南航空现况怎样)用一场直播找到市场扩张新渠道,海南航空做对了什么?
- (visa jcb 日本)优惠面面俱到 JCB信用卡邀您畅玩日本冰雪季
- (第三届“堡里有年味·回村过大年”民俗花灯会活动)第三届“堡里有年味·回村过大年”民俗花灯会活动
- (展示非遗魅力 长安启源助力铜梁龙舞出征)展示非遗魅力 长安启源助力铜梁龙舞出征
- (阿斯塔纳航空公司)阿斯塔纳航空机队飞机数量增至50架
- (北京香港航班动态查询)香港快运航空北京大兴新航线今日首航
- (我在港航“呵护”飞机 每一次安全着陆就是最好的荣誉)我在港航“呵护”飞机 每一次安全着陆就是最好的荣誉
- 热门文章