发 帖  
原厂入驻New
申请华秋企业认证 多层板首单免费打样!
30s提交资料,10分钟通过审核(免费赔付+顺丰包邮)>>立即报名
[问答] 请问MDK是按怎样的规则找到启动代码的?
259 MDK STM32 main
分享
首先感谢原子出的这款高性价比的板子,我只是一个从51刚过来的初学者,一个人学习STM32,有时候遇到问题长时间不能解决(因为不方便上网来论坛),真的很打击信心。 这两两天忍痛花了几百块办了无线上网,不过能上论坛就让我看到了希望,呵呵,希望各位前辈不吝赐教啊,下面是问题

1 同样一个程序(基于库),原先是软件仿真正常,但是硬件仿真会死循环在main函数之前的一段汇编代码里面,今天重装系统后在编译一下发现两者都正常了。

2有时候一进入仿真,MDK便自己跳到了汇编窗口,是什么原因?

3 以下是stm32f10x.h里面的一段代码,建立工程的时候不是已经确定了芯片的类型了吗?这代码干什么用的,又是怎样起作用的。
#IF !defined (STM32F10X_LD) && !defined (STM32F10X_MD) && !defined (STM32F10X_HD)
/* #define STM32F10X_LD */   /*!< STM32 Low density devices */
#define STM32F10X_MD    /*!< STM32 Medium density devices */
/* #define STM32F10X_HD */   /*!< STM32 High density devices */
#endif

4 以下也是stm32f10x.h里面的一段代码,这代码起神马作用?有必要吗
#define HSE_Value    ((uint32_t)8000000)
#define HSI_Value    ((uint32_t)8000000)
#define HSEStartUp_timeOut   ((uint16_t)0x0500)
5 其实库里面还有好多的这样的问题,看不懂我觉得心里没底
6 什么时候要像下面那样加上两个下划线,这样啥用意?
#ifndef __STM32F10x_H
#define __STM32F10x_H
7 我知道STM32要先执行启动代码在执行main函数,但是MDK怎么知道启动代码在哪儿,或者说MDK是按怎样的规则找到启动代码的,是不是只要在工程里面加入了启动代码,无论project workspace怎样组织,MDK自己都能找到它。
8 这个问题需要贴图,但是图片贴不上来(确定按钮无效)
9论坛帖子好乱,建议帖子更细的分类,                                          当然这得耗费原子哥很多时间,不过不然的话,以后帖子就越来越乱了,就不能很好的发挥论坛的作用
0
2019-11-4 23:43:37   评论 分享淘帖 邀请回答

相关问题

19个回答
1,具体死在哪里?
2,这种一般是程序崩溃了.或者你直接调出了汇编窗口在查看.
3,你的代码不全吧?应该是:
#if !defined (STM32F10X_LD) && !defined (STM32F10X_MD) && !defined (STM32F10X_HD) && !defined (STM32F10X_CL)
  /* #define STM32F10X_LD */   /*!< STM32F10X_LD: STM32 Low density devices */
  /* #define STM32F10X_MD */   /*!< STM32F10X_MD: STM32 Medium density devices */
  /* #define STM32F10X_HD */   /*!< STM32F10X_HD: STM32 High density devices */
  #define STM32F10X_CL   /*!< STM32F10X_CL: STM32 Connectivity line devices */
#endif
这段话就是说没有任何定义的时候,定义一个CL类型的器件,也就是设定默认值的作用.
4,这个还真没用到过.
5,所以我不用库.呵呵.
6,下划线“__”属于编程风格的内容,对程序没有影响。不用下划线也可以,用几个下划线也由个人习惯。
7,复位其实也是一个中断,复位之后执行的函数就属于你说的启动代码部分了.在.s文件里面,复位中断的服务函数如下:
; Reset handler routine
Reset_Handler  &nbspROC
                EXPORT  Reset_Handler             [WEAK]
                IMPORT  __main
                LDR     R0, = SystemInit_ExtMemCtl ; initialize external memory controller
                BLX     R0
                LDR     R1, = __initial_sp        ; restore original stack pointer
                MSR     MSP, R1                   
                LDR     R0, =__main
                BX      R0
                ENDP
可以看出,复位就是执行Reset_Handler 的内容,在最后调用main函数,就开始跑你写的代码了.
8,贴图很简单啊,再摸索下吧.
9,你说的乱,怎么个说法?能具体点么?
1 现在没那个问题了,不知道当时死在那儿了

3暂时不管了,虽然还是不懂
4 呵呵
5 难道我也得要放弃库吗,好像用库的不多啊,呜呜
6 印证了我自己的想法
7
8
9应该把精华帖子集中起来,如果是提问的问题,可以按照是那个外设的问题来分类
2019-11-5 05:34:21 评论

举报

2019-11-5 05:49:57 评论

举报

2019-11-5 06:01:08 评论

举报

                                贴图还要设置图片大小啊,这也太落后了吧, 呵呵
如上图,我想问以下MDK 里面的工程组织,文件之间是什么关系啊(这个问题我自己都觉得不好表达)
4,这些都是代表地址,比如说HSE_Value 代表32位的地址,地址为0X80000000,至于这个地址的作用是什么,LZ可以查询STM32使用手册。
9.精华贴已经是整理过的,LZ只要点击菜单的“精华贴”就可以了。
2019-11-5 06:24:21 评论

举报

贴图还要设置图片大小啊,这也太落后了吧, 呵呵
如上图,我想问以下MDK 里面的工程组织,文件之间是什么关系啊(这个问题我自己都觉得不好表达)
2019-11-5 06:37:07 评论

举报

请教个问题:我的电脑出现对文件及文件夹的拖放操作无效的问题,具体来说就是,比如用鼠标拖动一个文件(复制,移动,或者拖进某个文件夹),都不行(只要一放开鼠标左键,就跟什么都没有发生过一样);开机的时候还会出现任务栏点击无效,跟假死一样,这时候Ctrl+Alt+Del调出任务管理器后,假死问题就解决了,但是文件拖动无效问题依旧。
百度以下发现也有我这样的,不过问题都没有解决
更气人的是,我重新安装了系统,问题依旧
用360安全卫士,360杀毒,360急救箱,金山毒霸都没有发现问题
我现在已经绝望了。。。。
2019-11-5 06:45:45 评论

举报

楼主很有专研精神啊,建议先看看C语言的书,很多是C的基础知识。
3. 这是一个预处理,预处理都由 # 开始,在编译之前完成,你可以在文件内 #define xxx, 代表你定义了 xxx变量,你也可以在makefile 内 define 这个变量。#if !defined (STM32F10X_LD) && !defined (STM32F10X_MD) && !defined (STM32F10X_HD)
代表如果你没有定义这些变量,以下的代码会被编译,反之,编译器不会编译以下代码,就像注释掉了一样。建议你多看看C语言的书。
4, 就是简单的定义一些常量,#define HSE_Value ((uint32_t)8000000) 在预编译的时候,HSE_Value 在预编译的时候都会被((uint32_t)8000000) 替代。
5. 建议使用st的driver(不喜欢叫他库,一般意义上的库是看不到源码的)。一开始不要纠结于库是怎么实现的。
7 CM3 的地址从 0x00000000开始存放一些中断向量,0x00000004存放的是reset rlease 后的第一条指令,具体他是怎么映射到 flash address or system memory, 请参考 stm32的规格书,memory map 一章。
2019-11-5 06:54:15 评论

举报

memory map, 是在链接时候完成的,可以看看 scatter file 和 .map 文件。
2019-11-5 07:11:22 评论

举报

系统中毒了吧?
有的毒重装系统也无用的,因为它潜伏在其他盘,就算你格式化C盘,也是徒劳,只要点击任意一个有潜伏的盘,就会重新入侵你的电脑.
最好重装之前,先看看是什么毒,然后网上找一下针对性的办法.比较靠谱.
2019-11-5 07:24:51 评论

举报

  你這個情況我還真沒遇到過,有可能是中病毒原因。也有可能360優化一些本不該動的東西吧,據說360經常會優化出問題。 可以用卡巴斯基殺一下。
2019-11-5 07:29:54 评论

举报

我重装后刚一开机,就去试着拖动桌面的图标(此时还未对打开过其他盘),发现问题依旧啊
我想问一下,重装系统时,C盘会被先格式化再装入系统吧!格式化之后再N的病毒也死掉了吧?
2019-11-5 07:44:54 评论

举报

谢谢你的回复:你是从语法角度来说的,这个我还是基本懂的,呵呵,  我想问的是它为什么要加上这段代码,对最终代码有什么影响,谢谢
2019-11-5 08:00:51 评论

举报

我觉得我还需要了解MDK是怎样编译的,请问有相关参考资料么
2019-11-5 08:11:23 评论

举报

那就不是了,病毒可以潜伏在其他盘,除非你把硬盘给格了.否则还是会感染.
2019-11-5 08:29:27 评论

举报

2019-11-5 08:37:24 评论

举报

如果你使用 CodeSourcery 编译,你将了解更多,前提是你了解 gcc, makefile, MDK 只是一个 IDE,学习它你永远不会了解 ARM IMAGE 具体是怎么生成的。我一些同事拒绝使用 windows,因为你按键以后,后台做什么,你几乎永远都可能不知道。一开始,没有必要了解这么多,细枝末节先抛开,慢慢你就懂了。
2019-11-5 08:43:13 评论

举报

4 以下也是stm32f10x.h里面的一段代码,这代码起神马作用?有必要吗
#define HSE_Value ((uint32_t)8000000) 
#define HSI_Value ((uint32_t)8000000)
#define HSEStartUp_TimeOut ((uint16_t)0x0500)
前两个是设置外部高速时钟、内部高速时钟频率的,第三个是设置外部高速时钟的启动超时的,如果超时了,可以判定外部高速时钟失效。
2019-11-5 08:50:35 评论

举报

只有小组成员才能发言,加入小组>>

41个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /6 下一条

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