
MinGW是指只用自由软件来生成纯粹的Win32可执行文件的编译环境,它是Minimalist GNU on Windows的略称。
实际上 MinGW 并不是一个 单纯的C/C++ 编译器,而是一套 GNU 工具集合。除开 GCC 以外,MinGW 还包含有一些其他的 GNU 程序开发工具 (比如 gawk bison 等等)。
开发 MinGW 是为了那些不喜欢工作在 Linux(FreeBSD) *** 作系统而留在 Windows 的人提供一套符合 GNU 的 GNU 工作环境。
所以,使用 MinGW 我们就可以像在 Linux 下一样使用 GNU 程序开发工具。
GCC 就是 MinGW 的核心所在,GCC 是一套支持众多计算机程序语言的编译系统,而且在语言标准的实现上是最接近于标准的。并且 GCC
几乎可以移植到目前所有可用的计算机平台。(我的电脑上就还装有 DevKitPro,里面包含 GCC 的 ARM(for GBA/DS/GP32)
和 MIPS(for PSP) 版本。)
GCC 本身不像 VC 那样拥有IDE 界面(在 Windows 上也存在 Dev C++ 之类的支持 MinGW 编译器的
IDE)。源代码编辑你可以选用任何你喜欢的文本编辑器(据说微软的开发人员包括 VC 的开发都不用 VC 所带的 IDE 编辑器,而是选用 GNU
的 VIM 编辑器)。然后使用 make 等工具来进行软件项目的编译、链接、打包乃至发布。而像 cvs(svn)
源代码版本控制工具可以让世界上任何一个角落的人都可以参与到软件项目中来。
2下载MinGW
一种方法是到Sourceforge(>
解决这个问题要涉及的方面就多了:
1、Cortex-M3程序结构的问题。
2、了解Cortex-M3启动流程。
3、Cortex-M3中断向量表问题。
4、用Flash写函数来烧写程序,烧写的应该是bin文件而不是hex文件。
直接跟你说最快最直接解决方法(我的IAR开发环境下的修改,不知道你是用Keil开发还是IAR开发,这里会有些区别):
1、先在B程序代码中修改中断向量表,修改方法,在main函数开始调用NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x3f000);来重新配置中断向量表。
2、在A程序里边,跳转部分进行如下 *** 作
__disable_irq(); //关闭全部中断
__set_MSP((__IO uint32_t) 0x0803f000);//因为要执行另外的程序,堆栈要重新初始化
((void () (void)) (((vu32 )(0x0803f000+4)))) (); //最后进行程序跳转
3、因为程序A跳转的时候关闭了中断,在程序B里面各种初始化后要重新打开中断__enable_irq();
4、要将程序B编译生成的bin文件烧写,而不是hex文件。
5、忘了还有一点,修改程序B代码的起始位置,在IAR下的修改方式如下:
project->options,在linker栏目下有
点击选择固件库提供的配置文件stm32f10x_flashicf,然后在工程下打开该文件,修改程序B的代码起始位置,做如下的修改
OK!编译生成bin文件烧写即可。
你可以先试试,看能不能成再说,至于为什么这么改就需要去弄懂我上面提出的4个问题。
以上就是关于如何使用GNU编译器GCC来编译Cortex-M3全部的内容,包括:如何使用GNU编译器GCC来编译Cortex-M3、cortex m3-lpc1700的问题、((void (*) (void)) (0x08001004)) (); 这样不行的,编译没有报错,但是一旦执行就进入HardFault等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)