51单片机为什么不能从子程序直接跳转至主程序

51单片机为什么不能从子程序直接跳转至主程序,第1张

51单片机不能从子程序直接跳转至主程序是因为没有正确编辑子程序调用语句。编辑子程序的调用语句设计不规范会导致无法进行转换。根据查询相关资料信息得知使用单机片必须层次分明,不允许产生内外层循环交叉。

C语言有一个叫做setjmp.h的标准库提供了两个函数,可以进行跨函数跳转,不过C51支持不支持就不清楚了。。。如果你想这么做,可以混用汇编,使用JMP指令,不过不建议在子函数之间跳转,有可能会出错,JMP是没有现成保护的纯跳转,你应该注意你程序碰见ret指令返回时的位置。。。

最简单的一个事就是比如函数1的返回值是个2字节的数,函数2的返回值是个4字节的数,当你从第一个子程序跳到第二个,其实主函数是没有调用函数2,当函数2返回时,他会认为函数返回值仍然是2字节,这个时候就出错了,不同的函数的参数表也是不同的,这也一样会导致程序出错。。。所以这种跳转只是蹩脚适合无参数无返回值的纯过程。。。。

部分代码:

#include <iostream.h>

#include <string.h>

int GetBinary(char* p)

{

int num = 0

int base = 1 << 6

for(int i = 0 i < 7 i ++)

{

num += (p[i] - 48) * base

base >>= 1

}

return num

}

void GetString(char* digital)

{

int len = strlen(digital) / 7

for(int i = 0 i < len i ++)

{

char *p = digital + i * 7

int num = GetBinary(p)

if((num >= 65 && num <= 90 ) ||

(num >= 97 && num <= 122))

{

char temp = num

cout<<temp

}

}

cout<<endl

}

void main()

{

char *p ="100000110000101"

GetString(p)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12206777.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存