历史上的今天
返回首页

历史上的今天

今天是:2025年03月28日(星期五)

正在发生

2020年03月28日 | ARM裸机程序开发(十):C语言环境初始化

2020-03-28 来源:eefocus

Part1 栈初始化


一、满/空栈


1.1 满栈:当堆栈指针SP总是指向最后压入堆栈的数据(ARM采用)


1.2 空栈:当堆栈指针SP总是指向下一个将要放入数据的空位置


 


二、升/降 栈


根据入栈时,SP指针的移动方向分:若从低——》高 为升栈,从高到低为降栈(ARM使用)



三、栈帧


定义:一个函数所使用的那一部分栈,称为栈帧


栈帧的两个边界 :fp(r11) 、 sp(r13)


三、栈作用


3.1  保存局部变量


3.2 传递参数 :当传递的参数大于4个时,使用栈来传递,否则,用通用寄存器来传递


3.3 传递寄存器的值


Part2  BSS段1初始化


Part3  从汇编跳转到C


跳转方式:绝对跳转


Part4  c与汇编混合编程


一、何处使用汇编:1、效率要求高的地方;2、需要直接操作硬件(如协处理器的操作)


二、汇编中调用C:直接把C的入口指针直接赋值个PC


(C代码在单独的C文件中)


三、C中调用汇编:在汇编文件中将标号声明为.global,然后在C中直接作为函数调用即可。


(汇编代码在单独的文件中)


四、C中内嵌汇编


4.1 、格式


__asm__(


汇编语句部分


:输出部分


:输入部分


:破坏描述部分


);


//例1


void write_p15_c1(unsigned long value)


{


    __asm__(


“mcr p15, 0, %0, c1, c0, 0n”    @%0为一个占位参数


:


:”r”(value)      @r指明为通用寄存器


);


}


 


//例2


usigned long read_p15_c1 (void)


{


  usigned long value


__asm__(


  “mrc p15, 0, %0, c1, c0, 0n”    @c1中读出值送入Value中


    :”=r”(value)  @’=’表示只写操作数,用于输出部


    :


    :”memory”


);


return value;


}


4.2 、优化


在编程中,使用volatile来告诉编译器,不要对接下来的这部分代码进行优化(特别是在对硬件进行操作时)

推荐阅读

史海拾趣

Anachip公司的发展小趣事

Anachip公司自成立以来,一直致力于半导体技术的研发。在某个关键时期,公司研发团队成功开发出一种新型的芯片技术,这项技术在性能上远超当时的行业标准。凭借这一技术突破,Anachip迅速在市场上推出了一系列高性能的芯片产品,赢得了客户的广泛认可。随着产品销量的增长,公司的知名度和市场份额也逐步提升。

Dover Corporation公司的发展小趣事

进入21世纪后,Dover Corporation开始实施多元化发展战略。除了电梯业务外,公司逐渐将业务扩展到其他领域,如工程产品、燃料解决方案、成像和身份识别等。这一战略的实施使Dover能够更好地应对市场变化,实现业务的持续增长。

Daykin Electric Corp公司的发展小趣事

随着公司实力的不断增强,大金开始将目光投向国际市场。1972年,“DaikinEuropeN.V”在比利时奥斯坦斯市成立,标志着大金正式进入欧洲市场。此后,大金通过不断的技术创新和市场拓展,逐渐在全球范围内建立了广泛的销售网络。

Hilscher Gesellschaft für Systemautomation mbH公司的发展小趣事

面对市场的多元化需求,HVPSI不断扩展其产品线,从最初的高压电源模块拓展到高压直流电源、高压脉冲电源等多个领域。公司还投入大量资源研发新型材料和技术,以提升产品的性能和可靠性。这些努力使得HVPSI能够提供全方位的高压电源解决方案,满足不同行业、不同应用场景的需求。

申风(everanalog)公司的发展小趣事

在申风(everanalog)公司的发展过程中,知识产权保护和品牌建设一直是其重点关注的问题。公司注重技术研发和知识产权保护,已经拥有多项专利和注册商标。这些知识产权的保护不仅提升了公司的核心竞争力,也为公司的品牌建设提供了有力支持。同时,公司还积极参与行业展会和交流活动,提升品牌知名度和影响力。

Goodwork Semiconductor ( GW )公司的发展小趣事
确保稳压器的输入电压范围符合实际应用需求。

问答坊 | AI 解惑

利用DSP实现的实际环境下语音识别方法

利用DSP实现的实际环境下语音识别方法…

查看全部问答>

请教一下各位兄弟一个基础问题,cpu时钟频率和MIPS怎么理解?

我原来理解cpu的时钟频率是每秒执行的指令数 但是发现后来MIPS才是,那这样的话CPU的时钟频率的参考价值在哪里呢? 顺便问问cpu执行的指令是不是每个指令执行的时间都一样?…

查看全部问答>

请教 messagebox 提示框被覆盖的原因?

如题,小弟的小程序没有使用非模式, 是两个模式的对话框。 程序启动后用dialogbox调用一个对话框, 点击其他按钮后用dialogbox调用另一个对话框, 调试时发现,正常的提示框(messagebox), 如果不关闭,而是点击提示框下层的界面,messageb ...…

查看全部问答>

寻找PDA开发工程师

我们一家迅速成长的高科技企业,致力于为餐饮娱乐行业提供全面信息化管理的开发及应用。公司自主研发的快易点餐饮管理系统,在界面、功能、操作、细节等各个方面都领先于国内同类产品,获得广大客户的一致称赞。 PDA开发工程师 要求 1、具有从事 ...…

查看全部问答>

linux下的串口调试问题

笔记本没串口,买了根Usb转串口,用minicom -s设置:“ttys1\"为串口1,\"ttys2\"为串口2,问题是:用usb转的那个串口算串口几呢?…

查看全部问答>

最近毕业老想着跳槽的事情

我今年七月份进的公司,然后之前也没做过什么项目, 进了公司的第一个任务就是看资料,(各种芯片的) 第二个月研究以前别人写STM32的程序, 到现在还是在看别人写的程序, 组长说把他们的参数改改,然后,看看效果, 现在都是第三个月中了,…

查看全部问答>

上海博闻招聘ARM嵌入式应用工程师

工作职责: 1、Linux及wince操作系统上应用软件开发; 2、依据项目进度与需求,能按时完成所需功能开发; 3、分析并解决软件问题,维护并改善程序质量; 4、与测试人员互相沟通合作完成项目进度; 工作要求: 1、计算机及相关专业本科以上学历; 2 ...…

查看全部问答>

FPGA语言VHDL中,串口接受到一组数据,将这组数据分解成一份一份实数,再将这些实...

我这样做发现了一个问题,当未知参数设置成固定值时,程序跑起来是一点问题也没有,可是当用串口接受的数据带进去的时候,程序跑起来就不行了。串口接受的数据是没问题的,数据分解的也没有问题。 如下面的程序,当 v_pixel  ,h_pixel ...…

查看全部问答>

倒立摆有完成基础部分的吗?

本帖最后由 paulhyde 于 2014-9-15 03:26 编辑 RT。。目前卡在倒立那边    …

查看全部问答>