OpenEdv-开源电子网

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

ucos启动时是否也是在main前执行了SystemInit()?

[复制链接]

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2014-9-29 11:27:44 | 显示全部楼层 |阅读模式
5金钱
在没有ucos的时候,我们加入了startup_stm32f10x_hd.s文件,里面写着在main之前确实运行了SystemInit()。
但在加入ucos后,我没看到有启动文件,那是不是在main前没有SystemInit()呢?在哪里能看到是否执行了系统初始化?

最佳答案

查看完整内容[请看2#楼]

不是ucos内核执行SystemInit,是你的ucos是基于STM32,STM32底层是用的库函数,库函数在启动文件配置了先执行SystemInit初始化系统。所以先执行
小小蜗牛
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2014-9-29 11:27:45 | 显示全部楼层
不是ucos内核执行SystemInit,是你的ucos是基于STM32,STM32底层是用的库函数,库函数在启动文件配置了先执行SystemInit初始化系统。所以先执行
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
11471
金钱
11471
注册时间
2013-3-8
在线时间
1226 小时
发表于 2014-9-29 11:53:08 | 显示全部楼层
仿真调试看看,应该在main之前运行了SystemInit()。
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
 楼主| 发表于 2014-9-29 11:55:46 | 显示全部楼层
直接就停到main开始了,main前面的怎么看?不会弄
小小蜗牛
回复

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2014-9-29 12:05:24 | 显示全部楼层
怎么会没有呢,虽然不是必须汇编实现,但总应该有类似的功能代码。
于20150522停用该账号:http://www.microstar.club
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-9-29 12:14:25 | 显示全部楼层
回复【3楼】jiutianshenjian:
---------------------------------
去掉编译器里面的run to main选项。或者自己找到systeminit函数,在里面设个断点。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
 楼主| 发表于 2014-9-29 14:32:40 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
到不了SystemInit,去掉run to main,停在init.s里面:
;******************************************************************************
;                                   MOVE TO MAIN
;******************************************************************************
                ldr     r0, =__main
                bx      r0                                  ; Save this in register for possible long jump              ;

                ALIGN
                END 
      看不到main之前有执行SystemInit,如果没执行,是要和以前版本一样,自己写在main开头了?不过不写是能正常运行程序的,就是不知道哪里执行了。
小小蜗牛
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
 楼主| 发表于 2014-9-29 14:48:24 | 显示全部楼层
回复【5楼】Admin:
---------------------------------
我也觉得在main前应该已经先执行了系统初始化,就是看不到在哪。main里面是不用再写SystemInit了吧?
小小蜗牛
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-9-29 21:22:20 | 显示全部楼层
回复【7楼】jiutianshenjian:
---------------------------------
你这代码没有执行SystemInit函数。。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
 楼主| 发表于 2014-9-30 11:16:11 | 显示全部楼层
这是我的例程中的main函数,那是不是必须在main里面先执行SystemInit();?我屏蔽掉这个,程序没有什么不对。
也不知道屏蔽掉后,到底启动时哪里有没有运行过这个函数。也看不到调用了 startup_stm32f10x_hd.s
int main(void)
{
CPU_INT08U  err;

/*
SystemInit();

配置内部Flash接口,初始化PLL,配置系统频率。系统时钟缺省配置为72MHz,
在 system_stm32f10x.c 文件中定义系统时钟 SYSCLK_FREQ_72MHz。
这个函数是ST库中的函数,函数实体在 system_stm32f10x.c 文件 (V3.4.0)

startup_stm32f10x_hd.s 启动文件中已经调用了SystemInit()函数。
*/
SystemInit();

/* 禁止所有的中断 */
BSP_IntDisAll();

/* 初始化"uC/OS-II"内核 */
OSInit();

/* 创建一个启动任务(也就是主任务)。启动任务会创建所有的应用程序任务 */
OSTaskCreateExt(AppTaskStart, /* 启动任务函数指针 */
                    (void *)0, /* 传递给任务的参数 */
                    (OS_STK *)&AppTaskStartStk[APP_TASK_START_STK_SIZE - 1], /* 指向任务栈栈顶的指针 */
                    APP_TASK_START_PRIO, /* 任务的优先级,必须唯一,数字越低优先级越高 */
                    APP_TASK_START_PRIO, /* 任务ID,一般和任务优先级相同 */
                    (OS_STK *)&AppTaskStartStk[0],/* 指向任务栈栈底的指针。OS_STK_GROWTH 决定堆栈增长方向 */
                    APP_TASK_START_STK_SIZE, /* 任务栈大小 */
                    (void *)0, /* 一块用户内存区的指针,用于任务控制块TCB的扩展功能(如任务切换时保存CPU浮点寄存器的数据)。一般不用,填0即可 */
                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); /* 任务选项字 */
/*  定义如下:
OS_TASK_OPT_STK_CHK      使能检测任务栈,统计任务栈已用的和未用的
OS_TASK_OPT_STK_CLR      在创建任务时,清零任务栈
OS_TASK_OPT_SAVE_FP      如果CPU有浮点寄存器,则在任务切换时保存浮点寄存器的内容
*/                  

/* 指定任务的名称,用于调试。这个函数是可选的 */
OSTaskNameSet(APP_TASK_START_PRIO, (INT8U *)APP_TASK_START_NAME, &err);

/* 启动多任务系统,控制权交给uC/OS-II */
OSStart();
}
小小蜗牛
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 04:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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