我在linux环境下怎么就是编译不成功

我在linux环境下怎么就是编译不成功,第1张

你这个问题问得太模糊。你问的应该也不是一个简单的c语言或者其他语言写的代码(就一个文件)的编译问题。

同样一套代码,在不同的系统下面,是不一样的,在windows下面能过,在linux下不一定能过,在linux下能过,在unix下不一定能过,在suse

linux下能过,

在red

hat

linux下不一定能过,

在ubuntu

14.04

linux

下能过,

在ubuntu

12.04

linux

下不一定能过.

编译环境不同,编译结果就可能会不同。编译环境大致相同,编译结果都可能不一致,例如python,

版本不一致,gcc,

arm

rvds版本不一致,

perl版本不一致,

make

版本不一致,编译结果都可能不一致。

解决编译问题的基本方法就是看编译错误,从错误入手。另一个基本方法是,与能编译过的系统对比环境,一点一点找问题。

编译环境不是一句话可以说清楚的。举个例子:有兴趣可以看看android的编译,网上的资料很多。

方法/步骤

嵌入式 *** 作系统有分时 *** 作系统和实时 *** 作系统,如果 *** 作系统能够使计算机系统及时响应外部事件请求,并能控制所有实时设备和实时任务协调运行,且能在一个规定的时间内完成对事件的处理,怎么这种系统称为实时 *** 作系统。

如果系统必须在极其严格的时间内完成的任务叫做硬件的实时 *** 作系统,如果不是很严格的话就是软件的实时 *** 作系统。

前往官网下载最新版的FreeRTOS系统,然后解压缩到本地。有两个文件夹,FreeRTOS文件夹里面是 *** 作系统内核,FreeRTOS-Plus里面是一些中间件如文件系统,网络协议栈等。

值得一提的是,FreeRTOS的教学用书和API参考手册电子版均已免费提供,建议在现在安装FreeRTOS的同时也一并下载到本地,以供后期学习查阅。

FreeRTOS的主要特点如下:

1. 支持抢占式调度,合作式调度和时间片调度

2. 具有低功耗模式,称为tickless模式

3. FreeRTOS-MPU支持M3/M4/M7内核的MPU(内存保护单元)

4. 典型的内核使用大小在4k~9k

5. 支持消息队列、二值信号量、计数信号量、递归信号量和互斥信号量,可用于任务与任务之间的消息传递和同步,任务与终端间的消息传递和同步

6. 任务数量不限,任务优先级数量不限

7. 高效的软件定时器,不需要损耗额外的CPU时间,除非需要执行定时器任务

8. 任务间直接的消息传递,速度较快

9. FreeRTOS的队列是其它通信和同步机制的基础

移植FreeRTOS之前,原有的工程(比如跑马灯,越简单越好)中不能有SysTick、PendSV和SVC三个系统中断的使用,因为FreeRTOS系统要使用这三个中断。

1. 准备好简单工程的模板

2. 在工程模板中创建FreeRTOS文件夹,并将解压后源码FreeRTOS文件夹中Source目录下的所有内容复制进来

3. 在user目录下需要手动窗件FreeRTOSConfig.h的配置文件,也可以从官方demo中拿来修改后使用,比如从下载的源码目录下的FreeRTOS/Demo/CORTEX_M4F_STM32F407ZG-SK中进行拷贝

4. 将源码文件添加到MDK的工程目录中,其中heap_4.c文件路径Source/portable/MemMang,port.c的路径FreeRTOS/Source/portable/RVDS/ARM_CM4F,这是因为我们使用的M451是CM4F内核的

在工程中添加新的头文件搜索路径:

.\FreeRTOS\include

.\FreeRTOS\portable\RVDS\ARM_CM4F

打开FreeRTOSConfig.h配置文件,根据自己硬件配置进行修改

1. 首先将文件开头的__ICCARM__修改为__CC_ARM,即把编译器从IAR改为RealView

2. 将以下宏配置为0

configUSE_IDLE_HOOK

configUSE_TICK_HOOK

configCHECK_FOR_STACK_OVERFLOW

configUSE_MALLOC_FAILED_HOOK

3. #define configUSE_PREEMPTION 1 将会使能抢占式调度器

4. #define configCPU_CLOCK_HZ ( SystemCoreClock )设置系统主频(M451的系统主频为72MHz)

5. #define configTICK_RATE_HZ ( ( TickType_t ) 1000 )设置系统节拍为1kHz,即1ms

6. #define configMAX_PRIORITIES ( 5 )定义可供用户使用的最大优先级数为5,那么用户可以使用的优先级号是0,1,2,3,4

6. #define configTOTAL_HEAP_SIZE ( ( size_t ) ( 30 * 1024 ) )定义堆大小,FreeRTOS内核,用户动态申请内存,任务栈等都需要这个空间

4. 将工程整体重新编译一次,这样FreeRTOS基本移植结束了

编写测试程序来验证一致的FreeRTOS是否已经可以使用

1. 在main.c中添加一下几个头文件

#include "FreeRTOS.h"

#include "task.h"

#include "queue.h"

#include "croutine.h"

2. 在main函数的开头,禁止全局中断(除了NMI和HardFault),具体方法是:__set_PRIMASK(1)这样做的好处是可以防止执行的中断服务程序中有FreeRTOS的API函数,保证系统正常启动,不受别的中断影响。在port.c中的函数prvStartFirstTask中会重新开启全局中断

3. 创建任务AppTaskCreate()

4. 启动调度,开始执行任务vTaskStartScheduler()

烧写程序,运行,可以从串口看到正确的输出信息

很高兴为您解答。

ARM嵌入式开发五金|工具可分为六大类:RealView MDK中国版开发套件、RealView开发套件、Keil 8051/166工具、ARM应用评估板、ARM系统评估板、以及Keil 8051/166评估板。其中RealView MDK中国版开发套件由MDK开发工具、ULINK2仿真器和RealView RL-ARM组成;RealView开发套件由RVDS开发工具、RVI仿真器和RVT跟踪调试器组成;Keil 8051/166工具则由C51开发工具、C251开发工具和C166开发工具组成。

RealView MDK中国版开发套件主要针对ARM微控制器的开发。RealView开发套件(RVDS)是ARM公司继SDT与ADS1.2之后主推的新一代开发工具,RVDS 4.0标准版适用于所有的ARM7、ARM9、ARM10、ARM11、MP-Core、SCx00、Cortex-M3、Cortex-M1、Cortex-R4F和Cortex-A8处理器,08年10月新推出的RVDS 4.0专业版除了延伸支持到Cortex-A9以外,还具有独特的运行时优化功能、ARM向量化NEON编译器、ARM Profiler和ARM超快速模块(ARM926EJ-S、ARM1136J(F)-S、ARM1176JZ(F)-S、Cortex-R4、Cortex-A8和单核Cortex-A9)。

RVDS 4.0标准版主要针对基于ARM处理器的SoC、ASSP和复杂多内核ASIC的系统开发者,它基于开放源码Eclipse 3.3 IDE,它的编译器是目前业界所有针对ARM处理器的编译器中最好的,它的调试工具支持带嵌入式OS的复杂单核和多核SoC的软件开发,它支持Windows XP专业版、Windows Vista商业版和企业版、以及Red Hat企业版Linux V4/V5运行平台。

RealView MDK和RVDS的区别是:MDK只支持基于ARM7、ARM9、Cortex-M1和Cortex-M3的微控制器,但RVDS还支持用户定义的MCUMDK不支持所有的ARM处理器,包括ARM7、ARM9、ARM10、ARM11、Cortex-M1、Cortex-M3、Cortex-R4、Cortex-A8和Cortex-A9,但RVDS全支持;MDK基于uVision IDE开发环境,而RVDS基于Eclipse开发环境;MDK支持符号目标码输入,但RVDS不支持;MDK有实时内核库,但RVDS没有;MDK不支持多核,但RVDS支持;MDK不支持DSP,但RVDS支持;MDK不支持缓存,但RVDS支持;MDK可仿真启动代码,但RVDS不行;MDK可仿真中断,但RVDS不行;MDK可仿真外设,但RVDS不行;MDK支持逻辑分析仪,但RVDS不支持。

ARM编译器已拥有20年历史,现已是业界标准,由于它是和ARM处理器共同开发的,因此它在编译ARM处理器时效率非常高。ARM编译器是一个高度优化的ISO C/C++编译器,支持全部C和C++运行库,支持所有ARM内核和ARM架构,包括ARM、Thumb、Thumb2、VFP和NEON,它目前已在数亿电子产品的开发中得到应用。

ARM编译器有2大优势:1)它使开发者可采用更低的CPU速度、更低的功耗和更小的存储空间,从而使得开发者能够实现更高性能的应用;2)它是与ARM IP协同开发和验证的,因此可确保代码准确度和更容易的验证。

与前一代RVDS 3.1版本相比,RVDS 4.0专业版对Cortex-A8的编译速度平均提高了7%。此外,RVDS 4.0专业版还实现了目标码连接时的代码优化,以及运行时的代码优化,不仅性能可继续提高6%,而且还可进一步节省40%的目标代码。

RVDS 4.0专业版的ARM编译器还实现了对Cortex-A9超标量管道的优化。当多个Cortex-A9内核采用SIMD NEON指令集时,RVDS 4.0专业版的ARM向量化NEON编译器对每个内核的编译速度可提高4倍。RVDS 4.0专业版还拥有针对Cortex-A9的超快速实时系统模型(RTSM),ARM Profiler支持Cortex-A9的RTSM。其调试器也支持Cortex-A9的SMP系统。

RVDS 4.0专业版现已可支持以下3款ASSP产品,分别是飞思卡尔的i.MX31、以及TI的达芬奇DM355和OMAP3530,未来还将支持更多的ASSP产品。

如若满意,请点击右侧【采纳答案】,如若还有问题,请点击【追问】


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存