单片机里的程序是从main函数开始执行的吗?请高手进。
我的单片机是STC的,现在发现的问题是:只要外部文件中有一个函数没处理好,单片机就直接不工作了,发现好像在执行main函数之前,单片机还干过别的一样,请问单片机执行的顺序...
我的单片机是STC的,现在发现的问题是:只要外部文件中有一个函数没处理好,单片机就直接不工作了,发现好像在执行main函数之前,单片机还干过别的一样,请问单片机执行的顺序是怎样的???
展开
8个回答
展开全部
那得看你的程序是怎么写的,可以配置让单片机先执行别的程序再执行main
如果你没有任何控制的话,执行完全部的程序,会从main()开始,如果要控制的话,也很简单
分为两类:
一类是不执行下面的指令,返回main()第一句指令,那直接使用return;就可以了
另一类是不范围main()第一句指令,而从中间某一句开始执行,有两种方法
1.对于循环层数较少的循环,可以使用break;
2.对于循环层数较多,不建议每层都使用break那就利用标签也可以做到,你只要在程序需要的位置设个标签,在程序最后返回标签,就可以了
例如:
main()
{
k=1;
start:
P0=0x00;
//后面程序省略
//程序最后书写如下这里可以加个你需要的条件,满足条件后,跳转从main{}的第一句开始再次执行
goto start;
}
我经常这样做,实践证明,真的很好用,你可以试试
如果你没有任何控制的话,执行完全部的程序,会从main()开始,如果要控制的话,也很简单
分为两类:
一类是不执行下面的指令,返回main()第一句指令,那直接使用return;就可以了
另一类是不范围main()第一句指令,而从中间某一句开始执行,有两种方法
1.对于循环层数较少的循环,可以使用break;
2.对于循环层数较多,不建议每层都使用break那就利用标签也可以做到,你只要在程序需要的位置设个标签,在程序最后返回标签,就可以了
例如:
main()
{
k=1;
start:
P0=0x00;
//后面程序省略
//程序最后书写如下这里可以加个你需要的条件,满足条件后,跳转从main{}的第一句开始再次执行
goto start;
}
我经常这样做,实践证明,真的很好用,你可以试试
展开全部
51的复位后程序入口是0x0000
如果汇编,一般在0x0000放上jmp main跳转到main运行
如果是C,编译器会在程序头上添加一段启动代码用于初始化,运行完之后,跳转到main。
一般情况,启动代码无需要理会。你的问题应该还是函数处理的问题。
如果汇编,一般在0x0000放上jmp main跳转到main运行
如果是C,编译器会在程序头上添加一段启动代码用于初始化,运行完之后,跳转到main。
一般情况,启动代码无需要理会。你的问题应该还是函数处理的问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
执行main之前,程序一般要做设定堆栈初值,ram清0两项工作。
如果编译用的是keil,会问你是否加入一段汇编文件(startup.a)这段汇编规划各个段,要设定堆栈初值,ram清0。
如果编译用的是keil,会问你是否加入一段汇编文件(startup.a)这段汇编规划各个段,要设定堆栈初值,ram清0。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
那得看你的程序是怎么写的,可以配置让单片机先执行别的程序再执行main
追问
怎么配置啊
追答
有点复杂,有一个初始化的过程
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询