91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

從文件角度了解Cortex-M開(kāi)發(fā)(1)

電子設(shè)計(jì) ? 來(lái)源:電子設(shè)計(jì) ? 作者:電子設(shè)計(jì) ? 2020-10-30 10:44 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

今天痞子衡給大家講的是嵌入式開(kāi)發(fā)里的 source 文件。


眾所周知,嵌入式開(kāi)發(fā)屬于偏底層的開(kāi)發(fā),主要編程語(yǔ)言是 C 和匯編。所以本文要講的 source 文件主要指的就是 c 文件和匯編文件。


盡管在平常開(kāi)發(fā)中,我們都只會(huì)關(guān)注自己創(chuàng)建的 .c/.h/.s 源文件,但實(shí)際上我們不知不覺(jué)中也跟很多不是我們創(chuàng)建的源文件在打交道,那么問(wèn)題來(lái)了,一個(gè)完整的嵌入式工程(以基于 ARM Cortex-M 控制器的工程為例)到底會(huì)包含哪些 source 文件呢?


現(xiàn)在就到了痞子衡的 show time 了,痞子衡將這些文件按來(lái)源分為五類十種,下面痞子衡按類別逐一分析這些文件:


第一類:Provided by Committee
第一類文件由 C 標(biāo)準(zhǔn)委員會(huì)提供,該類文件伴隨著標(biāo)準(zhǔn)的發(fā)布而逐漸壯大。該類文件主要就是一種,即 C 標(biāo)準(zhǔn)庫(kù)。


1. C standard Library

大家都知道 C 語(yǔ)言是有標(biāo)準(zhǔn)的,常見(jiàn)的 C 標(biāo)準(zhǔn)有 ANSI C(C89)、C99、C11,而 C 標(biāo)準(zhǔn)函數(shù)庫(kù)(C Standard library)就是所有符合 C 標(biāo)準(zhǔn)的頭文件的集合,以及常用的函數(shù)庫(kù)實(shí)現(xiàn)程序。C 標(biāo)準(zhǔn)庫(kù)由 Committee 制訂發(fā)布,通常會(huì)被包含在 IDE 里。列舉一些常見(jiàn)文件和函數(shù)如下,是不是覺(jué)得似曾相識(shí)?


/* 常用文件 */ assert.h,stdio.h,stddef.h,stdint.h,string.h ...


/* 常用定義 */ bool,NULL,uint8_t,uint16_t,uint32_t...


/* 常用函數(shù) */ assert(),printf(),memset(),memcpy()...


第二類:Provided by IDE(Compiler)

第二類文件由 IDE 提供,C 語(yǔ)言是編譯型語(yǔ)言,需要編譯器將 C 程序匯編成機(jī)器碼,所有便有了一些跟編譯器特性相關(guān)的函數(shù)庫(kù)。


2. Compiler Library
我們?cè)陂_(kāi)發(fā)嵌入式應(yīng)用時(shí)需要借助集成開(kāi)發(fā)環(huán)境(IDE),常見(jiàn)的 IDE 有 GCC(GNUC),Keil MDK(ARMCC),IAR EWARM(ICCARM),這些 IDE 都有配套的 C 編譯器,這些編譯器是各有特色的,為了充分展示各編譯器特色,配套的函數(shù)庫(kù)便應(yīng)運(yùn)而生。


編譯器函數(shù)庫(kù)是因 IDE 而異的,此處僅講一個(gè)例子以供參考,需要了解更多需查看各 IDE 手冊(cè)。


以 IAR EWARM 里的 DLib_Product_string.h 文件為例,該文件中重定義了 memcpy 的實(shí)現(xiàn):


#define _DLIB_STRING_SKIP_INLINE_MEMCPY


#pragma inline=forced_no_body


__EFF_NENR1NW2R1 __ATTRIBUTES void * memcpy(void * _D, const void * _S, size_t _N)


{


__aeabi_memcpy(_D, _S, _N);


return _D;


}


第三類:Provided by ARM

第三類文件由 ARM 提供,嵌入式程序的執(zhí)行靠的是控制器內(nèi)核(此處指的內(nèi)核便是 ARM 內(nèi)核),ARM 公司在設(shè)計(jì)內(nèi)核時(shí),提供了一些內(nèi)核模塊的接口開(kāi)發(fā)者可以通過(guò)這些接口訪問(wèn)內(nèi)核資源,CMSIS header 里就是這些內(nèi)核模塊資源的接口。


3. CMSIS header
完整的 CMSIS header 目錄應(yīng)該是下面這個(gè)樣子,而必須要關(guān)注的只有 /CMSIS/Include 下面的 core_cmx.h 文件


/CMSIS


/Core


/DAP /* ARM debugger 實(shí)現(xiàn) */


/Driver /* ARM 統(tǒng)一的常用外設(shè) driver API */


/DSP_Lib /* ARM 優(yōu)化實(shí)現(xiàn)的 DSP Lib */


/Include /* ARM 內(nèi)核資源接口 */


/arm_xx.h


/cmsis_xx.h


/core_cmx.h


/Lib /* ARM 優(yōu)化實(shí)現(xiàn)的標(biāo)準(zhǔn) Lib */


/Pack


/RTOS /* ARM 推出的 RTOS- RTX */


/RTOS2


/SVD


/Utilities


core_cmx.h 文件里定義了內(nèi)核資源接口,里面最常用的三大模塊是 SCB,SysTick,NVIC,一個(gè)嵌入式開(kāi)發(fā)的老手看到這些模塊應(yīng)該要向痞子衡揮手示意,來(lái),讓痞子衡看見(jiàn)你們的雙手~~~


第四類:Provided by Chip Producer


第四類文件是由 ARM 芯片生產(chǎn)商提供,我們?cè)谶x型一個(gè) ARM 芯片時(shí),除了看 ARM 內(nèi)核類型外,還得看芯片內(nèi)部外設(shè)資源,是這些外設(shè)導(dǎo)致了 ARM 芯片差異,于是便有了各大 ARM 廠商爭(zhēng)奇斗艷,比如 NXP(Freescale), ST, Microchip(Atmel),ARM 廠商賦予了 ARM 芯片各種外設(shè)資源,同時(shí)也會(huì)提供這些外設(shè)資源的接口。該類別下文件有四種:


4. device.h:芯片頭文件,主要包含中斷號(hào)定義(xx_IRQn)、外設(shè)模塊類型定義(xx_Type) 、外設(shè)基地址定義(xx_BASE)。


/////////////////////////////////////////////////////


// 中斷號(hào)定義


typedef enum IRQn {


NotAvail_IRQn = -128,


/* Core interrupts */


NonMaskableInt_IRQn = -14,


HardFault_IRQn = -13,


...
SysTick_IRQn = -1,


/* Device specific interrupts */


WDT0_IRQn = 0,


...


} IRQn_Type;


////////////////////////////////////////////////////


// 外設(shè)寄存器定義


typedef struct {


__IO uint32_t MOD;


...


__IO uint32_t WINDOW;


} WWDT_Type;


#define WWDT_WINDOW_WINDOW_MASK (0xFFFFFFU)


#define WWDT_WINDOW_WINDOW_SHIFT (0U)


#define WWDT_WINDOW_WINDOW(x) (((uint32_t)(((uint32_t)(x)) << WWDT_WINDOW_WINDOW_SHIFT)) & WWDT_WINDOW_WINDOW_MASK)


////////////////////////////////////////////////////


// 外設(shè)基地址定義


#define WWDT0_BASE (0x5000E000u)


5. startup_device.s:芯片中斷向量表文件,主要包含中斷向量表定義(DCD xx_Handler) ,以及各中斷服務(wù)程序的弱定義(PUBWEAK)。Note:該文件因編譯器而異。


;;基于 IAR 的 startup_device.s 文件


MODULE ?cstartup


;; Forward declaration of sections.


SECTION CSTACK:DATA:NOROOT(3)


SECTION .intvec:CODE:NOROOT(2)


PUBLIC __vector_table


PUBLIC __Vectors_End


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


; 中斷向量表定義


DATA


__vector_table


DCD sfe(CSTACK)


DCD Reset_Handler


DCD NMI_Handler


DCD HardFault_Handler


...


DCD SysTick_Handler


; External Interrupts


DCD WDT0_IRQHandler


...


__Vectors_End


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


; 中斷服務(wù)程序弱定義


THUMB


PUBWEAK WDT0_IRQHandler


PUBWEAK WDT0_DriverIRQHandler


SECTION .text:CODE:REORDER:NOROOT(2)


WDT0_IRQHandler


LDR R0, =WDT0_DriverIRQHandler


BX R0


WDT0_DriverIRQHandler


B .


END


6. system_device.c/h:芯片系統(tǒng)初始化文件,主要包含全局變量 SystemCoreClock 定義(提供芯片內(nèi)核默認(rèn)工作頻率)、SystemInit()函數(shù)定義(完成最基本的系統(tǒng)初始化,比如 WDOG 初始化,RAM 使能等,這部分因芯片設(shè)計(jì)而異)。


7. device SDK Library:官方提供的芯片外設(shè) SDK driver 包文件,有了這個(gè) SDK 包可以直接使用片內(nèi)外設(shè)設(shè)計(jì)自己的應(yīng)用,而不需要查看芯片手冊(cè)里的外設(shè)模塊寄存器去重寫(xiě)外設(shè)驅(qū)動(dòng)。當(dāng)然并不是每個(gè)廠商都有完善的 SDK 包,這取決于各廠商對(duì)軟件服務(wù)的重視程度。
// 來(lái)自于 NXP SDK 的 WWDT driver API


void WWDT_GetDefaultConfig(wwdt_config_t *config);


void WWDT_Init(WWDT_Type *base, const wwdt_config_t *config);


void WWDT_Deinit(WWDT_Type *base);


void WWDT_ClearStatusFlags(WWDT_Type *base, uint32_t mask);


void WWDT_Refresh(WWDT_Type *base);


第五類:Created by Developer

第五類文件是開(kāi)發(fā)者自己創(chuàng)建,用于實(shí)現(xiàn)開(kāi)發(fā)者自己的嵌入式應(yīng)用,分為應(yīng)用系統(tǒng)啟動(dòng)文件,應(yīng)用系統(tǒng)初始化文件,應(yīng)用文件。其中應(yīng)用系統(tǒng)啟動(dòng)和初始化文件屬于 main 函數(shù)之前的文件,一般可以通用,大部分開(kāi)發(fā)者并不關(guān)心其具體內(nèi)容,但是了解其過(guò)程可以加深對(duì)嵌入式系統(tǒng)結(jié)構(gòu)的理解。


8. reset.s:應(yīng)用系統(tǒng)復(fù)位啟動(dòng)文件,了解 ARM 原理的都知道,image 前 8 個(gè)字節(jié)數(shù)據(jù)分別是芯片上電的初始 SP, PC,其中 PC 指向的便是本文件里的 Reset_Handler,這是芯片執(zhí)行的第一個(gè)函數(shù)入口,該函數(shù)主要用于完成應(yīng)用系統(tǒng)初始化工作,包含應(yīng)用中斷向量表重定向、調(diào)用芯片系統(tǒng)初始化、ARM 系統(tǒng)寄存器 rx 清零、初始化應(yīng)用程序各數(shù)據(jù)段、初始化 ARM 系統(tǒng)中斷、跳轉(zhuǎn) main 函數(shù)。


// 一段經(jīng)典的 startup code


SECTION .noinit : CODE


THUMB


import SystemInit


import init_data_bss


import main


import CSTACK$$Limit


import init_interrupts


EXTERN __vector_table


REQUIRE __vector_table


#define SCB_BASE (0xE000ED00)


#define SCB_VTOR_OFFSET (0x00000008)


PUBLIC Reset_Handler


EXPORT Reset_Handler


Reset_Handler


// Mask interrupts


cpsid i


// Set VTOR register in SCB first thing we do.


ldr r0,=__vector_table


ldr r1,=SCB_BASE


str r0,[r1, #SCB_VTOR_OFFSET]


// Init the rest of the registers


ldr r2,=0


ldr r3,=0


ldr r4,=0


ldr r5,=0


ldr r6,=0


ldr r7,=0


mov r8,r7


mov r9,r7


mov r10,r7


mov r11,r7


mov r12,r7


// Initialize the stack pointer


ldr r0,=CSTACK$$Limit


mov r13,r0


// Call the CMSIS system init routine


ldr r0,=SystemInit


blx r0


// Init .data and .bss sections


ldr r0,=init_data_bss


blx r0


// Init interrupts


ldr r0,=init_interrupts


blx r0


// Unmask interrupts


cpsie i


// Set argc and argv to NULL before calling main().


ldr r0,=0


ldr r1,=0


ldr r2,=main


blx r2


__done


B __done


END


9. startup.c:應(yīng)用系統(tǒng)初始化文件,該文件里主要包含兩個(gè)初始化函數(shù),init_data_bss()、 init_interrupts(),data, bss 段數(shù)據(jù)的初始化是為了保證嵌入式系統(tǒng)中所有全局變量能有一個(gè)開(kāi)發(fā)者指定的初值。由于 data,bss 段的位置是在鏈接階段確定的,所以此處需要配合 linker 文件才能找到正確的 data,bss 位置,linker 文件是因 IDE 而異的,所有本文件要想做到通用,必須增加各 IDE 條件編譯,此處僅以 IAR 下的實(shí)現(xiàn)為例:


// 基于 IAR 的 startup.c 文件


#if (defined(__ICCARM__))


#pragma section = ".intvec"


#pragma section = ".data"


#pragma section = ".data_init"


#pragma section = ".bss"


#pragma section = "CodeRelocate"


#pragma section = "CodeRelocateRam"


#endif


void init_data_bss(void)


{


#if defined(__ICCARM__)


uint8_t *data_ram, *data_rom, *data_rom_end;


uint8_t *bss_start, *bss_end;


uint8_t *code_relocate_ram, *code_relocate, *code_relocate_end;


uint32_t n;


// 初始化 data 段 .data section (initialized data section)


data_ram = __section_begin(".data");


data_rom = __section_begin(".data_init");


data_rom_end = __section_end(".data_init");


n = data_rom_end - data_rom;


if (data_ram != data_rom)


{


while (n--)


{


*data_ram++ = *data_rom++;


}


}


// 初始化 bss 段 .bss section (zero-initialized data)


bss_start = __section_begin(".bss");


bss_end = __section_end(".bss");


n = bss_end - bss_start;


while (n--)


{


*bss_start++ = 0;


}


// 初始化 CodeRelocate 段 (執(zhí)行在 RAM 中的函數(shù)(由 IAR 指定的 __ramfunc 修飾的函數(shù))).


code_relocate_ram = __section_begin("CodeRelocateRam");


code_relocate = __section_begin("CodeRelocate");


code_relocate_end = __section_end("CodeRelocate");


n = code_relocate_end - code_relocate;


while (n--)


{


*code_relocate_ram++ = *code_relocate++;


}


#endif


}


void init_interrupts(void)


{


NVIC_ClearEnabledIRQs();


NVIC_ClearAllPendingIRQs();


}


10. application.c/h:應(yīng)用文件,此處便是主函數(shù)以及各功能函數(shù)的集合了,嵌入式老司機(jī)們,請(qǐng)開(kāi)始你的表演~~~


void taskn(void)


{


// Your task code


}


int main(void)


{


printf("hello world/r/n");


taskn();


...


return 0;


}


至此,嵌入式開(kāi)發(fā)里的各種來(lái)源的 source 文件痞子衡便介紹完畢了,掌聲在哪里~~~

審核編輯 黃昊宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Cortex-M
    +關(guān)注

    關(guān)注

    2

    文章

    234

    瀏覽量

    31105
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Cortex-M0和Cortex-M0+的區(qū)別

    咱們芯源MCU主要是Cortex-M0+處理器,那么Cortex-M0+比Cortex-M0處理器強(qiáng)在哪里呢?下面針對(duì)2者的關(guān)鍵特性對(duì)比進(jìn)行簡(jiǎn)單區(qū)別,如下: 1、處理器流水線 Cor
    發(fā)表于 01-22 06:23

    最小化ARM Cortex-M CPU功耗的方法與技巧分享

    1 理解Thumb-2   首先,讓我們從一個(gè)看起來(lái)并不明顯的起點(diǎn)開(kāi)始討論節(jié)能技術(shù)—指令集。所有Cortex-M CPU都使用Thumb-2指令集,它融合了32位ARM指令集和16位Thumb指令集
    發(fā)表于 01-21 06:19

    Cortex-M0 處理器介紹

    功耗的32位處理器。 Cortex-M0是Cortex-M家族中的M0系列。最大特點(diǎn)是低功耗的設(shè)計(jì)。Cortex-M0為32位、3級(jí)流水線RISC處理器,其核心仍為馮.諾依曼結(jié)構(gòu),是指
    發(fā)表于 01-16 08:04

    探索HRPS - M50霍爾效應(yīng)角度傳感器:工業(yè)應(yīng)用的理想之選

    探索HRPS-M50霍爾效應(yīng)角度傳感器:工業(yè)應(yīng)用的理想之選 在電子工程師的日常工作中,角度傳感器是一個(gè)至關(guān)重要的組件,它廣泛應(yīng)用于工業(yè)自動(dòng)化、交通運(yùn)輸、可再生能源等眾多領(lǐng)域。今天,我們就來(lái)深入
    的頭像 發(fā)表于 12-10 10:05 ?422次閱讀

    基于 DR1M90 的 Linux-RT 內(nèi)核開(kāi)發(fā)編譯配置到 GPIO / 按鍵應(yīng)用實(shí)現(xiàn)(1

    本手冊(cè)由創(chuàng)龍科技研發(fā),針對(duì) DR1M90,詳述 Linux-RT 實(shí)時(shí)內(nèi)核開(kāi)發(fā):含實(shí)時(shí)性測(cè)試(Linux 與 Linux-RT 對(duì)比、CPU 空載 / 滿負(fù)荷 / 隔離狀態(tài)測(cè)試)、內(nèi)核配置編譯
    的頭像 發(fā)表于 12-02 10:38 ?1192次閱讀
    基于 DR<b class='flag-5'>1M</b>90 的 Linux-RT 內(nèi)核<b class='flag-5'>開(kāi)發(fā)</b>:<b class='flag-5'>從</b>編譯配置到 GPIO / 按鍵應(yīng)用實(shí)現(xiàn)(<b class='flag-5'>1</b>)

    Cortex-M產(chǎn)品的特色

    。 開(kāi)發(fā)支持:設(shè)計(jì)人員可從ARM生態(tài)系統(tǒng)的許多工具中選擇,或者使用單一、全面的工具鏈支持所有Cortex-M器件。 架構(gòu)擴(kuò)展:ARM還提供了一系列的架構(gòu)擴(kuò)展用于滿足下一代處理器的需求,如DSP擴(kuò)展、SIMD指令、浮點(diǎn)單元和Helium技術(shù),為特定應(yīng)用場(chǎng)景提供了
    發(fā)表于 11-26 07:22

    Cortex-M內(nèi)核中的精確延時(shí)的方法

    使用 CYCCNT寄存器來(lái)測(cè)量執(zhí)行某個(gè)任務(wù)所花的周期數(shù),這也可以用作時(shí)間基準(zhǔn)相關(guān)的目的(操作系統(tǒng)中統(tǒng)計(jì) CPU使用率可以用到它)。” Cortex-M中的DWT它有一個(gè)32位的寄存器叫CYCCNT
    發(fā)表于 11-21 07:51

    為什么cortex-M0+功耗低?

    1. 流水線層級(jí)簡(jiǎn)化 Cortex-M0:采用 3級(jí)流水線(取指、解碼、執(zhí)行)。 更多流水線層級(jí)導(dǎo)致每個(gè)時(shí)鐘周期需激活更多硬件單元,動(dòng)態(tài)功耗較高。 流水線沖突(如分支預(yù)測(cè)錯(cuò)誤)需刷新流水線,浪費(fèi)
    發(fā)表于 11-19 08:15

    Cortex-M級(jí)別的轉(zhuǎn)換

    一、 簡(jiǎn)述 Cortex-M 里面有特權(quán)級(jí)別的概念,不同級(jí)別可以設(shè)定不同的權(quán)限,如何轉(zhuǎn)換特權(quán)級(jí)別基本是本章的內(nèi)容。 二、操作模式 ARM M 核操作模式有兩個(gè): 線程(Thread)模式:在復(fù)位時(shí)或
    發(fā)表于 11-19 07:32

    明晚8點(diǎn)|睿擎文件系統(tǒng)實(shí)戰(zhàn):開(kāi)發(fā)到發(fā)布全流程解析

    文件操作到鏡像發(fā)布,一次直播掌握完整開(kāi)發(fā)流程!在嵌入式系統(tǒng)開(kāi)發(fā)中,文件系統(tǒng)是數(shù)據(jù)存儲(chǔ)、配置管理和資源訪問(wèn)的核心基礎(chǔ)。然而在實(shí)際
    的頭像 發(fā)表于 11-11 11:53 ?651次閱讀
    明晚8點(diǎn)|睿擎<b class='flag-5'>文件</b>系統(tǒng)實(shí)戰(zhàn):<b class='flag-5'>從</b><b class='flag-5'>開(kāi)發(fā)</b>到發(fā)布全流程解析

    【RA-Eco-RA6M4開(kāi)發(fā)板評(píng)測(cè)】使用ULINK2開(kāi)發(fā)瑞薩MCU

    Cortex-M 高達(dá) 1 兆比特/秒(UART 模式)的串行線查看器 (SWV) 數(shù)據(jù)跟蹤 · 在執(zhí)行、終端仿真和串行調(diào)試輸出過(guò)程中具有內(nèi)存讀/寫(xiě)功能的實(shí)時(shí)代理 · 與 Keil IDE 和調(diào)試器
    發(fā)表于 09-25 23:08

    請(qǐng)問(wèn)NuMicro? Cortex-M? 系列芯片是否支持 I2C 監(jiān)視器功能?

    NuMicro? Cortex-M? 系列芯片是否支持 I2C 監(jiān)視器功能?
    發(fā)表于 08-21 06:04

    【RA-Eco-RA6M4開(kāi)發(fā)板評(píng)測(cè)】+初識(shí)篇

    RA-Eco-RA6M4開(kāi)發(fā)板是一款基于 Arm? Cortex?-M33 內(nèi)核的開(kāi)發(fā)工具,且具有1
    發(fā)表于 07-16 19:06

    幾個(gè)角度了解音頻功放和掌握相關(guān)產(chǎn)品

    1. 基本原理與分類 基本原理: 音頻功放的工作原理基于電子電路設(shè)計(jì),主要功能是放大來(lái)自音源設(shè)備(如CD播放器、手機(jī)等)的電信號(hào),使其能夠推動(dòng)揚(yáng)聲器發(fā)聲。放大過(guò)程需要保持信號(hào)的完整性和保真度,以確保
    的頭像 發(fā)表于 04-18 14:45 ?1107次閱讀
    <b class='flag-5'>從</b>幾個(gè)<b class='flag-5'>角度了解</b>音頻功放和掌握相關(guān)產(chǎn)品

    瑞薩RA8快速上手指南:Cortex-M85內(nèi)核瑞薩RA8開(kāi)發(fā)環(huán)境搭建 并點(diǎn)亮一個(gè)LED

    因?yàn)?b class='flag-5'>Cortex-M內(nèi)核,瑞薩RA8系列單片機(jī)支持多種市面上常見(jiàn)的開(kāi)發(fā)環(huán)境,像Keil MDK、IAR EWARM等,而本文講述的是瑞薩自家官方的IDE(e2 studio)。
    的頭像 發(fā)表于 03-17 14:35 ?1947次閱讀
    瑞薩RA8快速上手指南:<b class='flag-5'>Cortex-M</b>85內(nèi)核瑞薩RA8<b class='flag-5'>開(kāi)發(fā)</b>環(huán)境搭建 并點(diǎn)亮一個(gè)LED