admin管理员组

文章数量:1543652

目录

    • IAR环境下,使用Live Watch实时监控变量值
    • IAR替换mcu库
    • Linux中删除swp文件
    • 使用J-Link通过SWD接口直接下载.hex文件和.bin文件到MCU(下载J-Flash软件)
    • linux设置时间命令
    • Jlink无法识别排查方法
    • Linux设置开机自运行
    • while循环&CPU占用率高问题深入分析与解决方案
    • tcpdump抓包命令
    • 软件SPI(芯海的硬件SPI卡顿)
    • TFTP传文件
    • 模组通信注意交互delay时序
    • Vs code通过ssh远程安装插件
    • github访问慢解决方法
    • 访问空指针程序崩溃(系统发送信号11终止进程)
    • 程序崩溃(系统发送信号6 SIGABRT进程终止)
    • Linux命令之重定向 >、 >>、 1>、 2>、 1>>、 2>>、 <
    • 为什么要用到二级指针
    • 在线C语言格式化、在线格式化C语言代码、C语言代码美化器
    • keil编译提示 Undefined symbol ......(referred from......)
    • keil编译提示内存不足Error: L6406E: No space in execution regions with .ANY selector matching xxx
    • curl 使用 curl_easy_perform 下载阻塞
    • Linux C语言编程通过进程名获得进程号(popen函数获取运行的输出结果)
    • windows10/windows11 清除C盘空间的办法
    • C语言实现检测Linux设备网络状态(代码里通过ping检测)
    • B站视频字幕提取、下载以及音频和文字教程合集
    • linux调试指令dmesg、addr2line定位断错误
    • 基站定位查询

IAR环境下,使用Live Watch实时监控变量值

循环放在数组里,也就是RAM里

__root uint8_t  ttW[ 4096 ] = {
   0};   //root强制编译
__root uint16_t tt_cntW = 0;
__root static uint16_t tt_testW = 0;

uint8_t mcu_flash_write(uint32_t addr, const uint8_t *p_data, uint32_t size)
{
   
        //自己测试写入到RAM里面                           
        for (tt_cntW = 0; tt_cntW < size; tt_cntW++){
   
          
        ttW[ tt_testW++ ]  = p_data[ tt_cntW ];                          
         
        }  
                                 
        return 0;  
}

IAR替换mcu库

进入IAR库路径config文件夹下,将使用的板子PAC55XX的4个配置文件替换到原IAR的config路径下:

Linux中删除swp文件

Linux vi 非正常退出都会在相应的位置保留.swp文件。并且这是隐藏文件,看不见

每次再vi 的时候就会出现告警信息并且导致无法编辑。注意swp文件是隐藏的 可以用ls -a 或者ls -al查看。怎么删除呢? rm .XXX.swp。注意有个小数点. 不然会提示找不到文件。

使用J-Link通过SWD接口直接下载.hex文件和.bin文件到MCU(下载J-Flash软件)

https://blog.csdn/qq_38125389/article/details/103335888

https://blog.csdn/weixin_30166267/article/details/105890712

也可以在keil中将编译好的文件替换成你想下载的文件,直接点击load即可!

linux设置时间命令

Jlink无法识别排查方法

IAR JLINK无法识别,并且更新了jlink固件,可以打开keil并来回拔插几次JLINK,再次进入debug菜单点击settings keil就能识别出来(同时也解决了因识别不到JLINK导致的电脑卡顿的问题),此时再次打开IAR也能识别使用了。

编译没问题下载失败提示很多乱七八糟东西试下把下载频率调低一点,1MHz试下。有时候识别不出来调低频率立马出来了

万用表测量发现板子给蓝牙模块供电不足3.3V,使用jlink单独供电即可
boot脚和reset脚测量电平是否异常

多拔插几次,频率设置小点

能识别,下载显示cortex-m0…多点几次下载,或者胡工说的拉不动?手动把芯海蓝牙拉高boot拉低reset
(boot识别成功率低于APP部分,可以先打开APP部分代码识别)

Linux设置开机自运行

Linux系统自动运行脚本设置路径在/etc/init.d,里面任何一个都可以,一般选择rcS,这里开机设置IP地址。

需要放到最后,否则大概率不生效。猜测应该是有先后逻辑关系,先完成USB网卡驱动,然后设置IP。

while循环&CPU占用率高问题深入分析与解决方案

https://wwwblogs/jpfss/p/10980236.html

这篇漫画讲的也很形象:https://mp.weixin.qq/s/9EUsVWhEr8sMrqZES2ziww

tcpdump抓包命令

https://blog.csdn/eleanoryss/article/details/128305659

//抓取端口号为8883的数据放到 .pcap文件里  s0表示不限制保存文件大小
tcpdump -i any port 8883 -w ./dump.pcap -s0//.pcap文件方便wireshark软件分析,也可以命名为.log文件

软件SPI(芯海的硬件SPI卡顿)

软件SPI特别慢

初始化

//芯海原厂硬件SPI初始化
//	cfg1.ssn_pin = P27;
//	cfg1.sclk_pin = P26;
//	cfg1.MISO = P31;
//	cfg1.MOSI = P23;
//	cfg1.baudrate = 1000000;
//    cfg1.spi_tmod = SPI_TRXD;
//	cfg1.spi_scmod = SPI_MODE0;
//	cfg1.spi_dfsmod = SPI_1BYTE;
//    cfg1.dma_rx_enable = false;
//    cfg1.dma_tx_enable = false;
//	cfg1.int_mode = false;
//	cfg1.evt_handler = NULL;
//	cfg1.force_cs = true;
//    cfg1.is_slave = false;
//	retval =  HalSpiMasterConfig(AP_SPI0, &cfg1);
//	if(retval != ERR_NONE)
//	{
   
//			LOG("spi init err!\r\n");
//	}
//    LOG("SPI Master Init\r\n");

	//软件SPI初始化
    // SPI GPIO init
    HalGpioPinInit(P23, GPIO_OUTPUT);                   // MOSI
    HalGpioPupdConfig(P23, GPIO_PULL_UP);
    HalGpioSet(P23, Bit_ENABLE);

    HalGpioPinInit(P26, GPIO_OUTPUT);                   // SCK Low
    HalGpioPupdConfig(P26, GPIO_PULL_UP);
    HalGpioSet(P26, Bit_DISABLE);

    HalGpioPinInit(P27, GPIO_OUTPUT);                   // CS
    HalGpioPupdConfig(P27, GPIO_PULL_UP);
    HalGpioSet(P27, Bit_ENABLE);

    HalGpioPinInit(P31, GPIO_INPUT);                    // MISO input
    HalGpioPupdConfig(P31, GPIO_FLOATING);
    // HalGpioSet(P31, Bit_ENABLE);

软件SPI函数实现

/* For test, By fx */
#define SPI_TRXD 0
#define SPI_TXD  1


static uint8_t spi_transfer_byte(uint8_t tx_byte)
{
   
    uint8_t rx_byte = 0;
    
    for(int i=0; i<8; i++)
    {
   
        if(tx_byte & 0x80)                              // 发送1bit数据
            HalGpioSet(P23, Bit_ENABLE);
        else
            HalGpioSet(P23, Bit_DISABLE);
        
        //nrf_gpio_pin_write(SPI_SCK, GPIO_HIGH);         // 模式0,时钟上升沿采样
        HalGpioSet(P26, Bit_ENABLE);
        tx_byte <<= 1;
        
        rx_byte <<= 1;                                  
        if(HalGpioGet(P31))
            rx_byte |= 0x01;                            // 接收1Bit数据,先移位后赋值,否则会多移一位
        
        //nrf_gpio_pin_write(SPI_SCK, GPIO_LOW);
        HalGpioSet(P26, Bit_DISABLE);
    }
    
    return rx_byte;
}

本文标签: worktips