豹哥嵌入式讲堂:ARM Cortex-M开发的文件详解(3)- 工程文件(.ewp)


9月新,又是一个簇新的开学季,最近后台留言太多之即使是关于开学季的穿搭和初秋单品推荐了,还有蛮多要求写男生穿搭的(留下一企盼写哈)。之前写了同样篇女大学生通过长技巧的(戳这里看:都说大学是所“整容院”,女学童如何过才会完美而生出气质?),大家好温习一下,今天虽重点整治一些副大学生的平价淘宝店铺。

  大家好,我是豹哥,猎豹的金钱豹,犀利哥的哥哥。今天豹哥被大家讲话的是嵌入式开发里的project文件

鞋  子

  前面两节课里,豹哥分别叫大家介绍了嵌入式开发被的鲜种植典型input文件:source文件、linker文件。豹哥要再次提问了,还来无发生input文件呢?答案真的是起,但这次真的是有还只发生了,本文要介绍的台柱project文件也属于半个input文件。为什么说凡是半单?因为project文件不仅包含开发者指定的input信息,还含有众多别样援助调试的input/output信息,算是嵌入式开发被承前启后的文件。而遵循文侧重点在于project文件被及开发者应用相关的input信息,仅当得到了这些input信息,再加上前面介绍的source和linker文件,那么您尽管早已沾了application所有的信息,你得为此其来可生成无歧义的不过尽image
binary。
  随着嵌入式软件工程的前进,为了回应日益复杂的需要,现代IDE的效能为愈发强了,IDE版本更迭为丁应接不暇,Keil
MDK已然踏入5.0时,IAR
EWARM更是进入了8.0秋,IDE各发生千秋,但本文要讲的情节可是每个IDE必须具有的基本功能,还是持续为IAR
EWARM为条例初步今天之情节:

关键词:小白鞋、牛津鞋、短靴、单鞋、凉鞋、运动鞋

一、标准IDE功能

  以开今天底主题之前,豹哥觉得有必要先简要给大家常见一下正经IDE应该负有的功效。现代IDE基本还是出于组件构成,嵌入式开发中之每个阶段还针对诺着相应的零件,由这些零件去贯彻每等的要求。

学生党要不思置尽多鞋子就是因自己之一般穿搭风格去拣,秋冬季小白鞋、短靴都是格外百搭的单品,可以列入必备清单。下面的图片显示重大归因于单鞋和小白鞋为主,短靴之类的还没有达标新,但是之前留意过冬天这些商家也闹货。运动鞋就无引进了哈,去协调爱的实体店选购就是好。

1.1 IDE组件

  标准嵌入式开发相应至少包括以下6只级次,而IAR里对于每个阶段还出1个或多单零件:

  • 输入(IAR Editor):编辑源文件代码。
  • 编译(ICCARM、IASMARM):编译源文件代码生成可实施第二进制机器码。
  • 浅析(C-STAT、MISRA-C):编译过程中检查代码中秘的题材。
  • 链接(ILINK):链接可尽第二前进制机器码到指定ARM存储空间地址。
  • 下载(I-jet、flashloader):将链接好之而是实行第二前行制机器码下充斥上芯片里面非易失性存储器。
  • 调剂(C-SPY、C-RUN):在线调试代码在芯片中施行情况。

  project文件根本为此来记录整合上述6独号的持有支付需要。

局推荐

1.2 IDE文件类型

  既然IDE有多零部件,那么与此同时也会有不同品类的文本为囤这些零部件的所需要的音讯。IAR里支持之公文扩展类型大多,豹哥在这边就列举你所创造的工根目录下之及工程同名的壮大文件,相信您势必会觉得熟悉。

.eww           // Workspace file
.ewp           // IAR Embedded Workbench project
.ewd           // Project settings for C-SPY
.ewt           // Project settings for C-STAT and C-RUN</td>
.dep           // Dependency information

  本文要摆的情节都蕴含在.ewp文件里,ewp文件记录了开发者也用指定的不可缺失的input信息,没有这些信息,application工程是免完的。换句话说,如果你抱了application的拥有source文件及linker文件,但从未ewp文件之口舌,可能造成最后生成的image
binary文件是例外之。

Note:更多IAR支持之扩大文件类型请查阅IAR软件安装目录下\IAR
Systems\Embedded Workbench
xxx\arm\doc\EWARM_IDEGuide.ENU.pdf文档里之File types一节。

01  大叔家达文西

二、解析project(ewp)文件

  前面豹哥铺垫了好多IDE/project基础概念,该是直奔主题的时候了,本文主角ewp工程文件到底包含如何开发者指定的input信息?豹哥打脚3只地方呢大家揭开:

描述 4.7  服务 4.8  物流 4.8

2.1 源文件组织

  一个稍复杂一点的嵌入式工程,应用代码行数应该是坐百行/千行为单位计算的(此处就靠的凡出于开发者自己创立的文书与代码),我们当团队代码的时段一定不会见只开创一个.c文件,单文件会招致代码功能模块结构不清,不便民工程的田间管理及保护。
  当我们也工程创造多只文本时,就会波及到一个必然问题:引用路径问题(所以路径信息就是本文要说之首先个input信息)。当源文件数量较多时,通常咱们会创造不同文件夹把同效果的源文件都位于同,当编译器开始编译.c源文件时见面搜索include语句所蕴涵的条文件。熟悉C语言的朋友肯定懂得下面两种不同include语句的用法:

#include <file.h>           // 引用编译器类库下的头文件(IDE安装路径)
#include "file.h"           // 引用当前工程下的头文件(project路径)

  所以在ewp文件里会包含路径信息,所有路线都该列在Options->C/C++
Compiler->Preprocessor下有Additional include
directories里,这个路既好是眼下PC的绝对路径,也可以是为ewp文件为原则的相对路径,为了确保工程得以当自由PC任意位置下健康编译,推荐使用如下相对路径方式列有具有途径:

ewp当前路径:$PROJ_DIR$/
ewp下级路径:$PROJ_DIR$/xxFolder/
ewp上级路径:$PROJ_DIR$/../

  说交路问题,豹哥在此间顺便让大家介绍一种经典的嵌入式工程文件目录组织措施:

\projectDir
           \doc                            --放置工程文档

           \bsp                            --放置bsp(板级)相关的source file
                  \linker                    --工程linker文件
                  \src                       --板级相关的源文件(比如pinout,clock等)
                  \builds\xxBuild\.ewp       --工程ewp文件
                  .eww                       --工程workspace文件

           \src                            --放置bsp无关的source file
                  \platform                  --芯片头文件及CMSIS文件
                  \drivers                   --芯片片内外设driver
                  \include                   --要被所有source引用的头文件
                  \startup                   --标准的startup code
                  \utilities                 --标准的通用函数
                  \middleware                --独立的中间件
                  \components                --板级外设组件driver
                  \application               --当前应用主逻辑代码

他家鞋子时重大发生小白鞋、单鞋、凉鞋三老大接近,各种和强之单品都有,质量对,就是发货挺缓慢,价格100+。

2.2 全局宏定义

  经常下规则编译的恋人一定懂得workspace文件及project文件之涉嫌,一个档一般只有会发一个eww文件,但却可能会见产生多只ewp文件,这是坐源代码里不时会起谱编译,我们有时会让品种不同之布局从而编译出不同的结果(速度优先/面积优先,特性控制…),这些安排就是由于全局宏定义来实现的,打开Options->C/C++
Compiler->Preprocessor下的Defined
symbols,在框内写副你要定义之大局宏:

MACRO1            // 等价于源文件里的#define MACRO1 (1)
MACRO2=2          // 等价于源文件里的#define MACRO2 (2)

  全局宏信息就是本文要说之第二单input信息,如果全局宏信息丢失,有时候工程编译并无会见报错,因为编译器在拍卖如下普遍用法里的口径编译语句时会默认不定义之宏为0,而当拍卖推荐用法里的基准编译语句则会报错,所以推举大家利用第二种口径编译用法来避开全局宏问题。

// 普遍用法
#if MACRO
    // your code block 1
#else
    // your code block 2
#endif

// 推荐用法
#if !defined(MACRO)
    #error "No valid MACRO defined!"
#elif (MACRO == 1)
    // your code block 1
#else
    // your code block 2
#endif

淘口令:¥3TM5035qqSI¥

2.3 编译选项

  编译选项包含了编译器所欲的有着信息,代码用通过编译器编译才能够十分成二上前制机器码,不同的编译器选项配置会转移不同之机器码,那么用指定哪些选项也?打开project的Options选项卡,分别设置下表item:

Position

Item

Description

General Options->Target->

Processor variant->Core

指定ARM内核版本

Endian mode

点名内核大小端模式

Floating point settings->FPU

指定内核支持的FPU版本

General Options->Library Configuration->

Library

选择C/C++动态链接库版本

General Options->Library Option 2->

Heap selection

选取HEAP实现版本

C/C++ Compiler->

Language 1->Language

指定编程语言类

Language 1->C dialect

点名C语言标准

Language 1->Language conformance

选针对性标准C/C++的以程度

Language 2->Plain ‘char’ is

摘对char的符号性默认处理方式

Language 2->Floating-point semantics

慎选对浮点数的处理遵循C标准的水平

Code->Process mode

点名内核指令集模式

Code->Position-independence

选取要扭转位置无关代码的对象

Optimizations->Level

挑优化等

Note:更多ewp文件中option解释请查阅IAR软件安装目录下\IAR
Systems\Embedded Workbench
xxx\arm\doc\EWARM_IDEGuide.ENU.pdf文档里的General
Options和Compiler Options俩小节。

  编译设置信息就是是本文要说之老三个input信息,当在project中组织好源文件并安装好对的大局宏定义和编译选项,那么恭喜你,你的application设计工作就主导好了。

02  热风旗舰店

三、创建demo工程

  也便于后续课程的进行,本节课在末顺便创建一个demo工程,以下是demo工程的信息:

IDE:        IAR EWARM v8.11.2
Device:     NXP MKL25Z128VLH4
project layout:   
    \D\myProject\bsp\builds\demo\demo.ewp
    \D\myProject\bsp\linker\iar\KL25Z128xxx4_flash.icf
    \D\myProject\bsp\src\startup_MKL25Z4.s   (仅保留前16个系统中断)
    \D\myProject\bsp\src\system_MKL25Z4.c   (仅做关闭WDOG操作)
    \D\myProject\bsp\src\system_MKL25Z4.h
    \D\myProject\bsp\helloArm.eww
    \D\myProject\src\platfrom\CMSIS
    \D\myProject\src\platfrom\devices\MKL25Z4
    \D\myProject\src\startup\reset.s
    \D\myProject\src\startup\startup.c
    \D\myProject\src\startup\startup.h
    \D\myProject\src\application\main.c
    \D\myProject\src\application\task.c
    \D\myProject\src\application\task.h

// main.c
//////////////////////////////////////////////////////////
#include "task.h"
const uint32_t s_constant = 0x7f;
int main(void)
{
    uint32_t l_variable = 0x7f;
    if (s_constant == l_variable)
    {
        normal_task();
        ram_task();
        heap_task();
    }
    while (1);
}

// task.c
//////////////////////////////////////////////////////////
#include "task.h"
static    uint32_t s_variable0;
__no_init uint32_t n_variable1;
static    uint32_t s_variable2 = 0x5a;
static uint8_t s_array[16];
void normal_task(void)
{
    s_variable0 *= 2;
}
__ramfunc void ram_task(void)
{
    n_variable1++;
}
void heap_task(void)
{
    uint8_t *heap = (uint8_t *)malloc(16 * sizeof(uint8_t));
    if (heap != NULL)
    {
        memset(heap, 0xa5+s_variable2, 16);
        memcpy(s_array, heap, 16);
        s_variable0 = (uint32_t)heap;
        free(heap);
    }
}

描述 4.8  服务 4.8  物流 4.8

胡外一样、几个小技巧

  又过来豹哥海外时了,细心之朋友看出上表有点儿远在标蓝,是的是,今天的洋外内容即是标蓝的种类有关。

热风在线下有实体店的,在淘宝也得以买入到,有男士及女士专区,鞋子(包括单鞋、凉鞋、拖鞋、小白鞋、短靴)、衣服都来货,款式非常多,不过有些款式个人认为有点老,质量对,小白鞋还是值得一采购的,价格几十至几百底且发出。

术1:运行于异构双查核

  时嵌入式产品尤其复杂,对MCU的性能要求也愈发大,各大ARM厂商也在不断推出性能进一步强的ARM
MCU产品,超高主频,双审批,四核MCU已经休好吃见了。对于里边的有异构双核MCU产品,有时在开发中会起诸如此类的要求:你有一致客的middleware会被异构双核同时调用,而少于个例外基础的授命集有或是免同等的,怎么解决此问题?有对象会想到分别于每个核下面都编译一份binary放置于存储器不同岗位,运行时分别对对应之binary,这是一个计,但较浪费存储空间,且发出或会见打出混淆导致误调用。有没起还好之法子?
  为了能就Cortex-M软件用,ARM公司在设计Cortex-M处理器时也那个授予了微机向下兼容软件二向前制向上兼容特性。通俗的说话来说即使是在比逊色版本处理器上编译的代码可以当可比高版本处理器上实行。所以解决办法就是选用异构双核里较逊色版本的基业在编译middleware,这样马上卖middleware可以同时受简单独核调用。

淘口令:¥Kmah035ttEA¥

技巧2:生成PIC代码

  经常同bootloader打交道的爱侣一定懂得,代码在通过链接阶段生成binary文件后,这个binary并无是得在任意位置的,必须坐linker文件指定的职位,如果位置并未放开是,可能会见招致执行出错。究其原因,是坐编译器在汇编源代码时以一些方针并无连续以享有function都聚集编成位置无关代码。如果我们负IDE编译选项将middleware汇编成PIC代码,那么我们可于工程中一直投入middleware的binary,然后借助linker的自定义section功能将该放于自由某个位置,最后使为这middleware
binary建立一个以binary首地址为基准的函数指针地址列表即可凭障碍调用这个middleware。

03  七九一鹿

技巧3:引用.c文件

  以品种开发中,我们于一个workspace下会创建多独project,常常是盖不同project需要包含不同之.c文件为成功不同的意义。那么会不能够单纯创造一个project呢能实现不同功效也?当然可以!通常情况下我们以.c文件被仅仅见面因此#include
“xx.h”语词来引用.h头文件,其实我们吧如出一辙可以引用.c文件,比如这样#include
“xx.c”,只是用留意尽量不要在.h文件被引用.c文件(除非该.h只见面被一个.c文件include)。看到这里的冤家若脑洞再大一些,你还是可就工程里单独需要加上一个.c文件,而别.c文件全部出于补缺加进工程的良.c文件逐级(仅能单级)引用进工程。

  至此,嵌入式开发里之project文件豹哥就是介绍了了,掌声在何~~~

描述 4.8  服务 4.8  物流 4.8

主打小白鞋、凉鞋、单鞋、短靴,价格大100+,整体风格偏日系文艺风,鞋型有点大,脚大的挑选,会显示下又可怜。

淘口令:¥aV5R035tAvF¥

04  MASOOMAKE 玛速女鞋

描述 4.8  服务 4.8  物流 4.7

冬天短靴的款式很多的,小白鞋的价位相对不是特意平价,价格普遍160+,质量不错。

淘口令:¥dgxB035G3Xj¥

05  鞋爱love shoes

描述 4.7  服务 4.7  物流 4.7

事先为发种植起了之,她家的小白鞋100老大左右。

淘口令:¥nK90035God3¥

06  TAKEMEHOME SHOES

描述 4.7  服务 4.7  物流 4.7

主打单鞋和凉鞋,真的坏平价,普遍价格六、七十首批,之前写鞋子种草文的时光(戳这里关押:稳住!
21
家颜值高、口啤赞的【淘宝女鞋店铺】大汇总来了!),在她家买过单鞋和拖鞋,挺耐穿的,而且那个好搭,淑女的连衣裙穿它吧从未违和感,不过同是发货暂缓,将近一个礼拜才发货。

拖鞋:65元

淘口令:¥KaqB035tMv4¥

衣  服

关键词:衬衫、针织衫、外套、卫衣、裤子、裙子、毛衣、T恤

秋天装更注重搭配和折叠过技巧,夏天市的众多单品现在加件薄外套为可以成为任何一样种风格。下面的淘宝店铺价格基本还于几十顶一百左右,因为关乎的铺最多,担心文章篇幅太丰富,而且有些公司以前就是产生种植起了,所以就算不一一详细去描述了。另外,童鞋们注意结合自身身材去挑选哈。

商店推荐

01  梅子熟了

描述 4.8  服务 4.8  物流 4.8

淘口令:¥uMBv03gjQ1L¥

02  糯米糯米 你免上马花

描述 4.8  服务 4.8  物流 4.8

淘口令:¥IzZl035rC0Y¥

03  米纱工作室MISAZ

描述 4.8  服务 4.8  物流 4.8

淘口令:¥XrNH035I9O0¥

04  EGGKA

描述 4.7  服务 4.8  物流 4.8

淘口令:¥P6Vn03TYdCZ¥

05  宿本

描述 4.7  服务 4.8  物流 4.8

淘口令:¥oBza035Id2C¥

06LILI EDIT 简约清新

描述 4.7  服务 4.8  物流 4.8

淘口令:¥KPqB035JHsj¥

07  JANE STUDIO

描述 4.8  服务 4.8  物流 4.8

淘口令:¥HqGm035JkTn¥

08 VNOOK

描述 4.7  服务 4.8  物流 4.8

淘口令:¥hQaF035IHe8¥

09  KG!左公斤右千范围!!!

描述 4.7  服务 4.8  物流 4.8

淘口令:¥ioCo035sWTS¥

10  SleepyBunny瞌睡兔

描述 4.8  服务 4.8  物流 4.8

淘口令:¥JUIG03gkuQA¥

11  CYANROSE 青蔷薇

描述 4.7  服务 4.8  物流 4.7

淘口令:¥x8YP03g7zjH¥

12  爱爱丸

描述 4.7  服务 4.8  物流 4.7

淘口令:¥ZEkZ035Hj0G¥

13  LOVEHEYNEW

描述 4.7  服务 4.8  物流 4.7

淘口令:¥wYVK035HxlN¥

14  Haco哈果超人

描述 4.8  服务 4.8  物流 4.8

淘口令:¥yZpB035J4Pn¥

15  金大班清新实用主义

描述 4.7  服务 4.8  物流 4.7

淘口令:¥xHus035rKKX¥

包  包

关键词:单肩包、双肩包、帆布包、托特包

(往期相关种起文章:淘宝美包大聚合!这25家值得珍藏的包包店铺简直不用太好看!)

店铺推荐

01  Cluci旗舰店

描述4.8  服务4.8  物流4.8

淘口令:¥4kw3035FFvd¥

02  禾二HIRCOMP

描述4.8  服务4.9  物流4.9

淘口令:¥LM2Q035FVQL¥

03  茶茶原创设计师店

描述4.8  服务4.9  物流4.8

淘口令:¥R4rE03g3I7p¥

04  大门儿头

描述 4.7  服务 4.7  物流 4.7

淘口令:¥WNbY035F9OU¥

05  MOMO设计品牌 集成店

描述 4.8  服务 4.8  物流 4.8

淘口令:¥TWeb035uKiX¥

06  白日梦长原创手工包店

描述 4.8  服务 4.8  物流 4.8

淘口令:¥xpDB035uVEk¥

07  若素良品

描述 4.8  服务 4.8  物流 4.8

淘口令:¥Tbap035uQwX¥

08  布本同色 大学生原创

描述4.8  服务4.9  物流4.9

淘口令:¥7XN8035Fb9I¥

09  极目兮原创设计

描述 4.8  服务 4.8  物流 4.8

淘口令:¥ddzH03gdYB9¥

袜  子

公司推荐

01  喵兔MiuToo袜子店

描述 4.8  服务 4.9  物流 4.9

淘口令:¥ieWP035KxBO¥

02  米吉诺拉

描述4.8  服务4.9  物流4.9

淘口令:¥rdjj03gbZIK¥

03  靴下物

描述 4.8  服务 4.9  物流 4.9

淘口令:¥9VAs035qRJX¥

04  梨小洛

描述 4.8  服务 4.8  物流 4.8

淘口令:¥AgEB035yDXR¥

05  田螺姑娘袜子铺

描述 4.8  服务 4.8  物流 4.8

淘口令:¥UXmF03gcJf7¥

近些年纪念写的情极其多招,穿长、防晒(军训必备)、零食、化妆包、收纳盒、花尽少的钱提高在品质之小物、平价护肤品balabala,后面还见面陆续写及…

今日关于女童鞋穿搭的集合先分享到这,下一致期待会享受男生版的哈~