<track id="iwwcc"></track>

  1. <pre id="iwwcc"><ruby id="iwwcc"></ruby></pre>
    <p id="iwwcc"></p>

    <p id="iwwcc"><strong id="iwwcc"><xmp id="iwwcc"></xmp></strong></p><pre id="iwwcc"><strong id="iwwcc"><address id="iwwcc"></address></strong></pre>
    <pre id="iwwcc"><ruby id="iwwcc"></ruby></pre>
    <acronym id="iwwcc"><strong id="iwwcc"></strong></acronym>
  2. 侵权投诉

    嵌入式开发中用来输出log的方法

    奈因PCB电路板设计 ? 2021-08-12 10:36 ? 次阅读

    正文:《论语》有云:“工欲善其事,必先利其器”。输出调试信息是软件开发中必不可少的调试利器,在出现bug时如果没有调试信息将会是一件令人头痛的事。本文主要介绍在嵌入式开发中用来输出log的方法,这些方法都是在实际开发过程中使用过的。

    嵌入式开发的一个特点是很多时候没有操作系统,或者没有文件系统,常规的打印log到文件的方法基本不适用。最常用的是通过串口输出uart log,例如51单片机,只要实现串口驱动,然后通过串口输出就可以了。这种方法实现简单,大部分嵌入式芯片都有串口功能。但是这样简单的功能有时候却不是那么好用,比如:

    (1) 一款新拿到的芯片,没有串口驱动时如何打印log

    (2) 某些应用下对时序要求比较高,串口输出log占用时间太长怎么办?比如usb枚举。

    (3) 某些bug正常运行时会出现,当打开串口log时又不再复现怎么办

    (4) 一些封装中没有串口,或者串口已经被用作其他用途,要如何输出log 下面来讨论这些问题:

    1

    输出log信息到SRAM

    准确来说这里并不是输出log,而是以一种方式不使用串口就可以看到log。在芯片开发阶段都可以连接仿真器调试,可以使用打断点的方法调试,但是有些操作如果不能被打断就没法使用断点调试了。这时候可以考虑将log打印到SRAM中,整个操作结束后再通过仿真器查看SRAM中的log buffer,这样就实现了间接的log输出。本文使用的测试平台是stm32f407 discovery,基于usb host实验代码,对于其他嵌入式平台原理也是通用的。首先定义一个结构体用于打印log,如下:

    typedef struct { volatile u8 type; u8* buffer; /* log buffer指针*/ volatile u32 write_idx; /* log写入位置*/ volatile u32 read_idx; /* log 读取位置*/ }log_dev;

    定义一段SRAM空间作为log buffer:

    static u8 log_buffer[LOG_MAX_LEN];

    log buffer是环形缓冲区,在小的buffer就可以无限打印log,缺点也很明显,如果log没有及时输出就会被新的覆盖。Buffer大小根据SRAM大小分配,这里使用1kB。为了方便输出参数,使用printf函数来格式化输出,需要做如下配置(Keil):

    并包含头文件#include 《stdio.h》, 在代码中实现函数fputc():

    //redirect fputc

    int fputc(int ch, FILE *f)

    {

    print_ch((u8)ch);

    return ch;

    }

    写入数据到SRAM:

    为了方便控制log打印格式,在头文件中再添加自定义的打印函数

    #ifdef DEBUG_LOG_EN

    #define DEBUG(。。.) printf(“usb_printer:”__VA_ARGS__)

    #else

    #define DEBUG(。。.)

    #endif

    在需要打印log的地方直接调用DEBUG()即可,最终效果如下,从Memory窗口可以看到打印的log:

    2

    通过SWO输出log

    通过打印log到SRAM的方式可以看到log,但是数据量多的时候可能来不及查看就被覆盖了。为了解决这个问题,可以使用St-link的SWO输出log,这样就不用担心log被覆盖。查看原理图f407 discovery的SWO已经连接了,否则需要自己飞线连接:在log结构体中添加SWO的操作函数集:

    typedef struct { u8 (*init)(void* arg); u8 (*print)(u8 ch); u8 (*print_dma)(u8* buffer, u32 len); }log_func; typedef struct { volatile u8 type; u8* buffer; volatile u32 write_idx; volatile u32 read_idx; //SWO log_func* swo_log_func; }log_dev;

    SWO只需要print操作函数,实现如下:

    u8 swo_print_ch(u8 ch) { ITM_SendChar(ch); return 0; }

    使用SWO输出log同样先输出到log buffer,然后在系统空闲时再输出,当然也可以直接输出。log延迟输出会影响log的实时性,而直接输出会影响到对时间敏感的代码运行,所以如何取舍取决于需要输出log的情形。

    在while循环中调用output_ch()函数,就可以实现在系统空闲时输出log。

    /*output log buffer to I/O*/

    void output_ch(void)

    {

    u8 ch;

    volatile u32 tmp_write,tmp_read;

    tmp_write = log_dev_ptr-》write_idx;

    tmp_read = log_dev_ptr-》read_idx;

    if(tmp_write != tmp_read)

    {

    ch = log_dev_ptr-》buffer[tmp_read++];

    //swo

    if(log_dev_ptr-》swo_log_func)

    log_dev_ptr-》swo_log_func-》print(ch);

    if(tmp_read 》= LOG_MAX_LEN)

    {

    log_dev_ptr-》read_idx = 0;

    }

    else

    {

    log_dev_ptr-》read_idx = tmp_read;

    }

    }

    }

    2.1 通过IDE输出

    使用IDE中SWO输出功能需要做如下配置(Keil):

    在窗口可以看到输出的log:

    2.2 通过STM32 ST-LINK Utility输出

    使用STM32 ST-LINK Utility不需要做特别的设置,直接打开ST-LINK菜单下的Printf via SWO viewer,然后按start:

    3

    通过串口输出log

    以上都是在串口log暂时无法使用,或者只是临时用一下的方法,而适合长期使用的还是需要通过串口输出log,毕竟大部分时候没法连接仿真器。添加串口输出log只需要添加串口的操作函数集即可:

    typedef struct { volatile u8 type; u8* buffer; volatile u32 write_idx; volatile u32 read_idx; volatile u32 dma_read_idx; //uart log_func* uart_log_func; //SWO log_func* swo_log_func; }log_dev;

    实现串口驱动函数:

    log_func uart_log_func = { uart_log_init, uart_print_ch, 0, };

    添加串口输出log与通过SWO过程类似,不再多叙述。而下面要讨论的问题是,串口的速率较低,输出数据需要较长时间,严重影响系统运行。

    虽然可以通过先打印到SRAM再延时输出的办法来减轻影响,但是如果系统中断频繁,或者需要做耗时运算,则可能会丢失log。要解决这个问题,就是要解决CPU与输出数据到串口同时进行的问题,嵌入式工程师立马可以想到DMA正是好的解决途径。

    使用DMA搬运log数据到串口输出,同时又不影响CPU运行,这样就可以解决输出串口log耗时影响系统的问题。串口及DMA初始化函数如下:

    u8 uart_log_init(void* arg) { DMA_InitTypeDef DMA_InitStructure; u32* bound = (u32*)arg; //GPIO端口设置 GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能GPIOA时钟

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//使能USART2时钟 //串口2对应引脚复用映射

    GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_USART2); //USART2端口配置 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHz

    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出

    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉 GPIO_Init(GPIOA,&GPIO_InitStructure); //USART2初始化设置

    USART_InitStructure.USART_BaudRate = *bound;//波特率设置 USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式 USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位 USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位

    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制 USART_InitStructure.USART_Mode = USART_Mode_Tx; //收发模式

    USART_Init(USART2, &USART_InitStructure); //初始化串口1 #ifdef LOG_UART_DMA_EN USART_DMACmd(USART2,USART_DMAReq_Tx,ENABLE); #endif USART_Cmd(USART2, ENABLE); //使能串口1

    USART_ClearFlag(USART2, USART_FLAG_TC); while (USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET); #ifdef LOG_UART_DMA_EN RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE); //Config DMA channel, uart2 TX usb DMA1 Stream6 Channel DMA_DeInit(DMA1_Stream6); DMA_InitStructure.DMA_Channel = DMA_Channel_4;

    DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)(&USART2-》DR);

    DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;

    DMA_InitStructure.DMA_MemoryDataSize = DMA_PeripheralDataSize_Byte;

    DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;

    DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;

    DMA_Init(DMA1_Stream6, &DMA_InitStructure); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE); #endif return 0; }

    DMA输出到串口的函数如下:

    u8 uart_print_dma(u8* buffer, u32 len)

    {

    if((DMA1_Stream6-》CR & DMA_SxCR_EN) != RESET)

    {

    //dma not ready

    return 1;

    }

    if(DMA_GetFlagStatus(DMA1_Stream6,DMA_IT_TCIF6) != RESET)

    {

    DMA_ClearFlag(DMA1_Stream6,DMA_FLAG_TCIF6);

    DMA_Cmd(DMA1_Stream6,DISABLE);

    }

    DMA_SetCurrDataCounter(DMA1_Stream6,len);

    DMA_MemoryTargetConfig(DMA1_Stream6, (u32)buffer, DMA_Memory_0);

    DMA_Cmd(DMA1_Stream6,ENABLE);

    return 0;

    }

    这里为了方便直接使用了查询DMA状态寄存器,有需要可以修改为DMA中断方式,查Datasheet可以找到串口2使用DMA1 channel4的stream6:

    f62d314a-f6fe-11eb-9bcf-12bb97331649.png

    最后在PC端串口助手可以看到log输出:

    f63d6722-f6fe-11eb-9bcf-12bb97331649.png

    使用DMA搬运log buffer中数据到串口,同时CPU可以处理其他事情,这种方式对系统影响最小,并且输出log及时,是实际使用中用的最多的方式。并且不仅可以用串口,其他可以用DMA操作的接口(如SPI、USB)都可以使用这种方法来打印log。

    4

    使用IO口模拟串口输出log

    最后要讨论的是在一些封装中没有串口,或者串口已经被用作其他用途时如何输出log,这时可以找一个空闲的普通IO,模拟UART协议输出log到上位机的串口工具。常用的UART协议如下:

    f65b1042-f6fe-11eb-9bcf-12bb97331649.png

    只要在确定的时间在IO上输出高低电平就可以模拟出波形,这个确定的时间就是串口波特率。为了得到精确延时,这里使用TIM4定时器产生1us的延时。注意:定时器不能重复用,在测试工程中TIM2、3都被用了,如果重复用就错乱了。初始化函数如下:

    u8 simu_log_init(void* arg) { TIM_TimeBaseInitTypeDef TIM_InitStructure; u32* bound = (u32*)arg; //GPIO端口设置

    GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能GPIOA时钟

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHz GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出

    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉

    GPIO_Init(GPIOA,&GPIO_InitStructure); GPIO_SetBits(GPIOA, GPIO_Pin_2); //Config TIM RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); //使能TIM4时钟 TIM_DeInit(TIM4);

    TIM_InitStructure.TIM_Prescaler = 1; //2分频 TIM_InitStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_InitStructure.TIM_Period = 41; //1us timer

    TIM_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseInit(TIM4, &TIM_InitStructure); TIM_ClearFlag(TIM4, TIM_FLAG_Update); baud_delay = 1000000/(*bound); //根据波特率计算每个bit延时 return 0; }

    使用定时器的delay函数为:

    void simu_delay(u32 us) { volatile u32 tmp_us = us; TIM_SetCounter(TIM4, 0); TIM_Cmd(TIM4, ENABLE); while(tmp_us--) { while(TIM_GetFlagStatus(TIM4, TIM_FLAG_Update) == RESET); TIM_ClearFlag(TIM4, TIM_FLAG_Update); } TIM_Cmd(TIM4, DISABLE); }

    最后是模拟输出函数,注意:输出前必须要关闭中断,一个byte输出完再打开,否则会出现乱码:

    u8 simu_print_ch(u8 ch) { volatile u8 i=8; __asm(“cpsid i”); //start bit GPIO_ResetBits(GPIOA, GPIO_Pin_2); simu_delay(baud_delay);

    while(i--) { if(ch & 0x01) GPIO_SetBits(GPIOA, GPIO_Pin_2);

    else GPIO_ResetBits(GPIOA, GPIO_Pin_2); ch 》》= 1; simu_delay(baud_delay); } //stop bit GPIO_SetBits(GPIOA, GPIO_Pin_2); simu_delay(baud_delay);

    simu_delay(baud_delay); __asm(“cpsie i”); return 0; }

    使用IO模拟可以达到与真实串口类似的效果,并且只需要一个普通IO,在小封装芯片上比较使用。

    5

    总结

    介绍了几种开发中使用过的打印调试信息的方法,方法总是死的,关键在于能灵活使用;通过打印有效的调试信息,可以帮助解决开发及后期维护中遇到的问题,少走弯路。

    责任编辑:haq

    原文标题:没有串口,你会如何打印调试日志?

    文章出处:【微信号:pcbgood,微信公众号:奈因PCB电路板设计】欢迎添加关注!文章转载请注明出处。

    收藏 人收藏
    分享:

    评论

    相关推荐

    单片机学习要掌握哪些知识呢

    单片机学习起来其实不难,反而是一件比较有趣的事情,之所以新手感觉比较难是因为不知道该怎么入手,从哪里开始学起。 单片机的...
    发表于 09-11 10:03 ? 184次 阅读
    单片机学习要掌握哪些知识呢

    今日直播|秋天已来,火力全开,看启明云端如何用极具性价比方案让彩屏化86盒“出圈”

    化繁为简,集中控制如何让你的家庭变得更智能;如何让操控变得更简单;如何花小成本就能让自己的家有大改变....
    的头像 杨杨 发表于 09-10 18:57 ? 8次 阅读
    今日直播|秋天已来,火力全开,看启明云端如何用极具性价比方案让彩屏化86盒“出圈”

    一文读懂NXP i.MX8M Plus有多优秀

    .MX 8M Plus应用处理器中集成的新IP(例如NPU和ISP)虽然很强大,但同时也可能会给工程....
    的头像 栾新科 发表于 09-10 18:13 ? 17次 阅读
    一文读懂NXP i.MX8M Plus有多优秀

    iMX8MPlus开发板试用进行时-飞凌嵌入式

    为配合飞凌嵌入式iMX8MPlus新品发布,电子发烧友企业号上线了测评试用活动,邀请电子发烧友海量的....
    的头像 栾新科 发表于 09-10 17:35 ? 38次 阅读
    iMX8MPlus开发板试用进行时-飞凌嵌入式

    安信Windows驱动开发教程第五部分

    安信Windows驱动开发教程:创建一个简单的 Windows 11 应用
    发表于 09-10 15:49 ? 13次 阅读
    安信Windows驱动开发教程第五部分

    安信Windows驱动开发教程第四部分

    安信Windows驱动开发教程:更新现有应用
    发表于 09-10 15:48 ? 10次 阅读
    安信Windows驱动开发教程第四部分

    安信Windows驱动开发教程第三部分

    安信Windows驱动开发教程:适用于 Windows 的 React Native
    发表于 09-10 15:42 ? 14次 阅读
    安信Windows驱动开发教程第三部分

    新手必看,最全 Linux 命令总结,建议收藏!

    发表于 09-10 15:42 ? 202次 阅读
    新手必看,最全 Linux 命令总结,建议收藏!

    安信Windows驱动开发教程第二部分

    安信Windows驱动开发教程:win 11 创建新应用的方法
    发表于 09-10 15:41 ? 14次 阅读
    安信Windows驱动开发教程第二部分

    安信Windows驱动开发教程第一部分

    安信Windows驱动开发教程:什么是通用 Windows 平台 (UWP) 应用程序?有什么功能?
    发表于 09-10 15:39 ? 12次 阅读
    安信Windows驱动开发教程第一部分

    网络数据采集卡NET6043-S使用说明书

    网络数据采集卡NET6043-S使用说明书
    发表于 09-10 14:16 ? 10次 阅读
    网络数据采集卡NET6043-S使用说明书

    网络数据采集卡NET6025-S使用说明书

    网络数据采集卡NET6025-S使用说明书
    发表于 09-10 14:15 ? 8次 阅读
    网络数据采集卡NET6025-S使用说明书

    网络数据采集卡NET6024-S使用说明书

    网络数据采集卡NET6024-S使用说明书
    发表于 09-10 11:51 ? 7次 阅读
    网络数据采集卡NET6024-S使用说明书

    NET数据采集卡V1.2使用说明书

    NET数据采集卡V1.2使用说明书
    发表于 09-10 11:49 ? 9次 阅读
    NET数据采集卡V1.2使用说明书

    电脑上那些熟悉的接口线都变成什么样了

    目前电脑一般只剩下了HDMI、USB、音频等接口,想起以前两侧整整一排的接口,随着笔记本电脑越来越薄....
    的头像 诺通 发表于 09-10 10:25 ? 120次 阅读
    电脑上那些熟悉的接口线都变成什么样了

    「含源码」关于NXP IMX8 Mini的图形开发指南(GPU)案例分享!

    前言Graphical Demo框架提供了对平台相关依赖的抽象。Graphical应用的通用封装,如模型加载、纹理加载、着色器编译等,以及其...
    发表于 09-10 09:26 ? 0次 阅读
    「含源码」关于NXP IMX8 Mini的图形开发指南(GPU)案例分享!

    华为携手宝山助力上海加快智能光伏、嵌入式电源等技术落地

    华为致力于通过技术创新,帮助各行各业持续降低能源消耗,助力能源结构转型。
    的头像 华为数字能源 发表于 09-10 09:17 ? 582次 阅读
    华为携手宝山助力上海加快智能光伏、嵌入式电源等技术落地

    调试界面??仄髯⒁馐孪?/a>

    文章目录注意事项技术参数??仄鞑僮魉得鞯魇越缑嬉?仄魃柚靡?仄骺⒒肪撑渲米⒁馐孪钜?仄鞒涞缡笨匦璐虻?OFF 处,否则...
    发表于 09-10 08:41 ? 0次 阅读
    调试界面??仄髯⒁馐孪? />    </a>
</div><div class=

    如何对BLHeli无刷电调进行调试

    如何对BLHeli无刷电调进行调试? 三段稳压芯片的引脚如何与电调的输入端进行连接? ...
    发表于 09-10 07:37 ? 0次 阅读
    如何对BLHeli无刷电调进行调试

    控制算法设计及程序流程图

    实用文档文案大全计算机控制技术课程设计姓    名:   XXX专    业: 自动化1101学   ...
    发表于 09-10 07:34 ? 0次 阅读
    控制算法设计及程序流程图

    嵌入式Linux在哪个领域更受青睐

    除了多数厂商可以利用Windows赚更多的钱这一事实以外,许多用户没有信心采 令人感到意外的是,Linux似乎在电脑用户通常不太注...
    发表于 09-09 11:12 ? 101次 阅读
    嵌入式Linux在哪个领域更受青睐

    关于嵌入式软件工程师的七问七答

    1.嵌入式软件工程师是什么?     嵌入式系统一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程...
    发表于 09-09 09:47 ? 0次 阅读
    关于嵌入式软件工程师的七问七答

    嵌入式Linux应用程序开发标准教程电子版

    共计12章,有需要剩下部分的私信我哦~免费分享
    发表于 09-09 09:29 ? 12次 阅读
    嵌入式Linux应用程序开发标准教程电子版

    总线的定义于分类和传输的基本原理

    在进行嵌入式开发中你一定遇到了各种总线,包括芯片内的地址总线和数据总线,高速总线和低速总线,还有芯片....
    的头像 嵌入式ARM 发表于 09-09 09:16 ? 119次 阅读
    总线的定义于分类和传输的基本原理

    ARM嵌入式简介

    ARM嵌入式简介 ARM(Advanced RISC Machines),既可认为是一个公司的名字,也可认为是对一类微处理器的统称。 A...
    发表于 09-09 07:55 ? 0次 阅读
    ARM嵌入式简介

    万能机调试操作流程

    V0.6一、万能机调试操作流程1. 请检查油管及阀头是否按下图所示连接。如是,进行下一步骤;如否,按图连接。2. 步骤1检查完毕后...
    发表于 09-09 06:16 ? 0次 阅读
    万能机调试操作流程

    Cortex-M裸机环境下临界区?;さ娜质迪?/a>

    今天给大家分享的是Cortex-M裸机环境下临界区?;さ娜质迪?。 搞嵌入式玩过 RTOS 的朋友想....
    的头像 strongerHuang 发表于 09-08 09:23 ? 687次 阅读
    Cortex-M裸机环境下临界区?;さ娜质迪? />    </a>
</div><div class=

    嵌入式开发中软件架构存在的意义

    在嵌入式软件开发,包括单片机开发中,软件架构对于开发人员是一个必须认真考虑的问题。软件架构对于系统整....
    的头像 strongerHuang 发表于 09-08 09:18 ? 115次 阅读
    嵌入式开发中软件架构存在的意义

    TLIMX8-EVM评估板规格书

    创龙科技TLIMX8-EVM是一款基于NXPi.MX8MMini的4核ARMCortex-A53+单....
    发表于 09-07 19:11 ? 3次 阅读
    TLIMX8-EVM评估板规格书

    不涨价!不缺货!198元ARM工业核心板,还含税!

    ARM Cortex-A8工业级核心板,198元起!
    的头像 黄工 发表于 09-07 19:04 ? 33次 阅读
    不涨价!不缺货!198元ARM工业核心板,还含税!

    Zynq-7010/7020供应紧张了?看这里!

    异构多核成为主流,ZYNQ系列出货量剧增!
    的头像 黄工 发表于 09-07 19:04 ? 26次 阅读
    Zynq-7010/7020供应紧张了?看这里!

    网络边缘是全新的嵌入式应用

    云计算具有许多优势,例如可以灵活地工作,包括在家中进行高效率且富有成果的工作(在新冠大流行期间这些非....
    发表于 09-07 10:15 ? 1765次 阅读
    网络边缘是全新的嵌入式应用

    【创龙科技】最全的TI、Xilinx、NXP工业核心板汇总!

    创龙科技(Tronlong)最新、最全工业核心板汇总来了!
    的头像 黄工 发表于 09-07 09:41 ? 24次 阅读
    【创龙科技】最全的TI、Xilinx、NXP工业核心板汇总!

    嵌入式工控机和传统工控机性能有什么区别?

    嵌入式工控机是为应用在各类狭小空间而设计的紧凑型工控机,因低功耗无风扇设计、小巧的的体积、稳定的性能....
    发表于 09-07 09:34 ? 158次 阅读
    嵌入式工控机和传统工控机性能有什么区别?

    嵌入式工控机和传统工控机的性能比较,二者有何区别

    嵌入式工控机是为应用在各类狭小空间而设计的紧凑型工控机,因低功耗无风扇设计、小巧的的体积、稳定的性能....
    发表于 09-06 17:06 ? 171次 阅读
    嵌入式工控机和传统工控机的性能比较,二者有何区别

    嵌入式多媒体卡产品JESD84-A44手册

    嵌入式多媒体卡产品JESD84-A44手册
    发表于 09-06 15:41 ? 19次 阅读
    嵌入式多媒体卡产品JESD84-A44手册

    Ubuntu服务器指南电子版下载

    Ubuntu服务器指南电子版下载
    发表于 09-06 15:39 ? 13次 阅读
    Ubuntu服务器指南电子版下载

    嵌入式软件开发三种程序架构详解

    在嵌入式软件开发,包括单片机开发中,软件架构对于开发人员是一个必须认真考虑的问题。 软件架构对于系统....
    的头像 硬件攻城狮 发表于 09-05 09:53 ? 276次 阅读
    嵌入式软件开发三种程序架构详解

    好消息 飞凌嵌入式在电子发烧友企业号正式入驻啦

    携手电子发烧友企业号Beta版上线,飞凌嵌入式在电子发烧友企业号正式入驻啦! 保定飞凌嵌入式技术有限....
    的头像 电子发烧友网工程师 发表于 09-03 15:48 ? 365次 阅读
    好消息 飞凌嵌入式在电子发烧友企业号正式入驻啦

    【含案例源码】IMX8基于FlexSPI、PCIe与FPGA的高速通信开发详解!

    前 言本文主要介绍i.MX 8M Mini基于FlexSPI、PCIe与FPGA的高速通信案例。本文....
    的头像 黄工 发表于 09-02 17:29 ? 138次 阅读
    【含案例源码】IMX8基于FlexSPI、PCIe与FPGA的高速通信开发详解!

    ElasticSearch调优需要注意什么

    ? S官方调优指南 第一部分:调优索引速度 第二部分:调优搜索速度 第三部分:通用的一些建议 ES发....
    的头像 Android编程精选 发表于 09-02 17:24 ? 338次 阅读
    ElasticSearch调优需要注意什么

    嵌入式系统开发的思维和注重方法

    开头的话 嵌入式开发是一个比较苦、容易背锅、可能仍然需要996而且拿钱较少,但也有些许乐趣的活,我一....
    的头像 嵌入式ARM 发表于 09-02 11:10 ? 1029次 阅读
    嵌入式系统开发的思维和注重方法

    电子发烧友企业号Beta版上线,入驻开启获客第一步

    ? ? NEWS 随着客户需求升级,电子产业供应链缺乏弹性、流量愈发昂贵、品类同质化等问题的凸显,对....
    的头像 电子发烧友开放平台 发表于 09-02 11:01 ? 268次 阅读
    电子发烧友企业号Beta版上线,入驻开启获客第一步

    解决方案 | 基于全志T507核心板设计智能加油机应用

    飞凌嵌入式FETT507-C核心板基于全志T507四核车规级处理器设计开发,可满足智能加油机的所有功....
    的头像 栾新科 发表于 09-01 18:28 ? 28次 阅读
    解决方案 | 基于全志T507核心板设计智能加油机应用

    FCU1104双网数采网关在“碳中和”目标下的在线能耗监测方案

    以智慧能源管理平台等辅助管理手段提高能源利用效率,实现节能减排,其中能耗在线监测平台无疑是投入少,性....
    的头像 栾新科 发表于 09-01 18:28 ? 31次 阅读
    FCU1104双网数采网关在“碳中和”目标下的在线能耗监测方案

    全志T507操作小技巧连载2-T507以太网配置方法

    本文硬件平台采用全志T507四核车规级处理器设计开发板,本文讲解T507开发板以太网配置方法。其它板....
    的头像 栾新科 发表于 09-01 18:28 ? 18次 阅读
    全志T507操作小技巧连载2-T507以太网配置方法

    全志T507操作小技巧连载1-T507屏幕切换的两种方式

    飞凌嵌入式FETT507-C核心板集成全志T507四核车规级处理器设计开发,Cortex-A53架构....
    的头像 栾新科 发表于 09-01 18:27 ? 15次 阅读
    全志T507操作小技巧连载1-T507屏幕切换的两种方式

    全国产+5G+AI在智慧电力中的应用探索 Q&A问答

    5G 改变社会,电力点亮未来。5G如何赋能智慧电网?应用场景有哪些? 保定飞凌嵌入式技术有限公司,....
    的头像 栾新科 发表于 09-01 18:27 ? 28次 阅读
    全国产+5G+AI在智慧电力中的应用探索 Q&A问答

    干货讲解 | OKT507-C开发板如何在Android系统上进行OTA升级

    OTA升级是Android系统所提供的标准软件升级方式。它功能十分强大,并且提供了完全升级(完整包)....
    的头像 栾新科 发表于 09-01 18:27 ? 25次 阅读
    干货讲解 | OKT507-C开发板如何在Android系统上进行OTA升级

    网关方案应用 | 工业网关在空气环境监测系统解决方案

    FCU1104工业网关与各类的传感器相连,对传感器的数据进行实时采集,通过LED屏幕将数据实时显示,....
    的头像 栾新科 发表于 09-01 18:27 ? 31次 阅读
    网关方案应用 | 工业网关在空气环境监测系统解决方案

    FCU1104 专为物联网边缘计算网关而生

    飞凌嵌入式最新产品FCU1104嵌入式控制单元正式发售!该平台采用了NXP超高效、高性能、低成本的i....
    的头像 栾新科 发表于 09-01 18:27 ? 25次 阅读
    FCU1104 专为物联网边缘计算网关而生

    干货 | LS1028A-C如何输出PWM方波?

    干货 | 飞凌OK1028A-C如何输出PWM方波? 最近,我收到了一个使用OK1028A-C输出....
    的头像 栾新科 发表于 09-01 18:27 ? 19次 阅读
    干货 | LS1028A-C如何输出PWM方波?

    飞凌嵌入式iMX8MP系列OKMX8MPQ-C 软件手册

    OKMX8MPQ-C开发板采用NXPi.MX8MPlus高性能处理器开发,内置NPU、ISP,AI计....
    发表于 09-01 18:23 ? 15次 阅读
    飞凌嵌入式iMX8MP系列OKMX8MPQ-C 软件手册

    飞凌嵌入式iMX8MP系列OKMX8MPQ-C_硬件使用手册

    i.MX8MPlus系列专注于机器学习和视觉、高级多媒体以及具有高可靠性的工业自动化。它旨在满足智慧....
    发表于 09-01 18:23 ? 42次 阅读
    飞凌嵌入式iMX8MP系列OKMX8MPQ-C_硬件使用手册

    shell脚本常用的调试方法介绍

    shell 是用户和操作系统交互的一个程序,经常用于执行一些自动化或者重复繁琐的任务,现在所有的 L....
    的头像 开关电源芯片 发表于 09-01 10:43 ? 110次 阅读
    shell脚本常用的调试方法介绍

    测评 | iMX8MM开发板,带你体验不同的影音体验

    OKMX8MM-C是飞凌基于NXP公司i.MX8M Mini 四核64位处理器所设计的一款开发板,主....
    的头像 栾新科 发表于 08-31 18:47 ? 45次 阅读
    测评 | iMX8MM开发板,带你体验不同的影音体验

    方案 | 基于全志T507核心板设计电子AI后视镜

    电子AI后视镜终端产品可借助飞凌FETT507-C核心板实现,该核心板基于全志T507四核车规级处理....
    的头像 栾新科 发表于 08-31 18:46 ? 30次 阅读
    方案 | 基于全志T507核心板设计电子AI后视镜

    基于FETMX8MP-C核心板的商用车智能驾驶终端

    2019年3月,我国交通部发布了JT/T 1178.2,即《营运货车安全技术条例 第2部分:牵引车辆....
    发表于 08-31 14:18 ? 182次 阅读
    基于FETMX8MP-C核心板的商用车智能驾驶终端

    Git基础知识综述

    Git基础知识综述
    发表于 08-31 10:42 ? 26次 阅读
    Git基础知识综述

    Mac苹果系统安装包DR4.5程序下载

    Mac苹果系统安装包DR4.5程序下载
    发表于 08-31 09:24 ? 39次 阅读
    Mac苹果系统安装包DR4.5程序下载
    国产成人+亚洲欧洲+综合,亚洲vs日韩vs欧美vs久久,欧美精品亚洲精品日韩专区 阿荣旗| 绿春县| 湘潭市| 衡阳县| 白沙| 宜君县| 山丹县| 习水县| 宜城市| 故城县| 临桂县| 贡山| 崇文区| 鲁山县| 贵定县| 桂平市| 双鸭山市| 大冶市| 城口县| 福泉市| 天长市| 容城县| 鹿泉市| 大足县| 哈密市| 永新县| 巫溪县| 班玛县| 宿迁市| 安徽省| 竹山县| 苏尼特右旗| 栾川县| 锡林郭勒盟| 乾安县| 石柱| 唐海县| 常宁市| 措美县| 綦江县| 邵阳市| http://444 http://444 http://444 http://444 http://444 http://444