OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 23496|回复: 15

关于,定义_sys_exit()以避免使用半主机模式

[复制链接]

3

主题

11

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2018-1-16
在线时间
3 小时
发表于 2018-2-14 17:29:57 | 显示全部楼层 |阅读模式
2金钱
串口输出的例子中,为了避免使用半主机模式提到定义的函数_sys_exit()void _sys_exit(int x)
{
        x = x;
}

看了很多帖子和资料,都让这么用,没人解释其中原理,为什么要这样做?这样做了怎么就可以避免半主机模式?
函数代码中有写:x=x的,也有些 while(1)的,目的何在?
main代码执行完再重来的意思吗,恳请前辈指点。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

315

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1669
金钱
1669
注册时间
2018-1-29
在线时间
160 小时
发表于 2018-2-14 18:41:51 | 显示全部楼层
我的理解:好像printf函数内部要用到此函数。使用半主机模式调试时,此函数由主机提供,没有主机就用不了printf。
为了使单片机独立运行printf。所以要自编一个此函数。让printf调用时,不依赖主机。这样就可以自由使用printf了!
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2018-1-16
在线时间
3 小时
 楼主| 发表于 2018-2-14 23:49:05 | 显示全部楼层
backup2k 发表于 2018-2-14 18:41
我的理解:好像printf函数内部要用到此函数。使用半主机模式调试时,此函数由主机提供,没有主机就用不了pr ...

感觉不像,觉得是系统层面的东西。
typedef char *va_list;

#define   _AUPBND        (sizeof (acpi_native_int) - 1)
#define   _ADNBND        (sizeof (acpi_native_int) - 1)
                     
#define _bnd(X, bnd) (((sizeof (X)) + (bnd)) & (~(bnd)))
#define va_arg(ap, T) (*(T *)(((ap) += (_bnd (T, _AUPBND))) - (_bnd (T,_ADNBND))))
#define va_end(ap)    (void) 0
#define va_start(ap, A) (void) ((ap) = (((char *) &(A)) + (_bnd (A,_AUPBND))))

//start.c
static char sprint_buf[1024];
int printf(char *fmt, ...)
{
va_list args;
int n;
va_start(args, fmt);
n = vsprintf(sprint_buf, fmt, args);
va_end(args);
write(stdout, sprint_buf, n);
return n;
}
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2018-1-16
在线时间
3 小时
 楼主| 发表于 2018-2-14 23:51:25 | 显示全部楼层
谢谢backup2k,自己顶一下,求解
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2018-1-16
在线时间
3 小时
 楼主| 发表于 2018-2-17 09:51:08 | 显示全部楼层
Up一下,求赐教
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2018-2-19 20:16:29 | 显示全部楼层
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2018-1-16
在线时间
3 小时
 楼主| 发表于 2018-2-20 23:05:05 | 显示全部楼层
正点原子 发表于 2018-2-19 20:16
看看这个:http://www.stmcu.org/module/forum/thread-598294-1-1.html

也是到原理时避而不谈,有点迷茫
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2018-2-25 02:27:37 | 显示全部楼层
pla250 发表于 2018-2-20 23:05
也是到原理时避而不谈,有点迷茫

实在想学习,那就好好找资料吧,肯定可以找到才对的。c语言的东西,把各种法典搬来研究。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

52

主题

334

帖子

0

精华

高级会员

Rank: 4

积分
560
金钱
560
注册时间
2016-4-12
在线时间
230 小时
发表于 2018-3-22 08:17:28 | 显示全部楼层
楼主有答案了吗?我也求解,上网查了一番,感觉说的好模糊,不理解为什么这么写
回复

使用道具 举报

18

主题

70

帖子

0

精华

高级会员

Rank: 4

积分
593
金钱
593
注册时间
2015-4-14
在线时间
47 小时
发表于 2018-6-7 10:38:10 | 显示全部楼层
正点原子 发表于 2018-2-25 02:27
实在想学习,那就好好找资料吧,肯定可以找到才对的。c语言的东西,把各种法典搬来研究。

我发现,如果更新Keil.STM32F4xx_DFP.2.9.0.pack库,下面这个函数
//定义_sys_exit()以避免使用半主机模式   
_sys_exit(int x)
{
        x = x;
}
就报错了,必须定义返回类型为void,这个是为啥?真的加一个void就可以了么
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2018-6-8 02:09:23 | 显示全部楼层
坏男孩 发表于 2018-6-7 10:38
我发现,如果更新Keil.STM32F4xx_DFP.2.9.0.pack库,下面这个函数
//定义_sys_exit()以避免使用半主机模 ...

因为编译器版本不一样了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2018-12-25
在线时间
12 小时
发表于 2019-9-16 13:24:38 | 显示全部楼层
正点原子 发表于 2018-6-8 02:09
因为编译器版本不一样了。

可是为什么改为 void 后,NRF直接就初始化都出错了
回复

使用道具 举报

15

主题

37

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
307
金钱
307
注册时间
2016-12-9
在线时间
33 小时
发表于 2020-2-28 17:09:30 | 显示全部楼层
时隔两年,楼主对于这个“sys_exit()以避免使用半主机模式”有哪些见解呢?
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2020-3-11
在线时间
9 小时
发表于 2020-4-20 10:13:10 | 显示全部楼层
  stm32 真的是有很多搞不懂啊, 原来大家都没有深究啊。
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2020-5-5
在线时间
8 小时
发表于 2020-5-5 21:51:30 | 显示全部楼层
http://www.keil.com/support/man/ ... hr1359122859512.htm
keil官方了解一下?看看有没有帮助
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2022-10-23
在线时间
2 小时
发表于 2022-10-25 19:59:22 | 显示全部楼层
可参考\Keil_v5\ARM\Startup下的Retarget.c,我也明白一点点
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 22:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表