使用stm32裸机或者rtt系统遇到的坑

2023-05-16

目录

一、rt-thread使用

16、LSE晶振初始化会出现一定的失败几率

15、串口队列溢出的问题

14、升级失败问题

13、rt-thread PWM1 CH1 CH1N 无法同时使用问题

12、使用换用c8芯片不能进入main函数,会出现HardFault的诊断错误

11、Fnction[rt_malloc] shall not be used in ISR

10、新建工程后,出现不能再次下载情况boot0置高。

9、移植后出现使能ping功能,现在是可以ping通,但是提示getaddinfo error。

8、F407制作软件包,修改#define STM32_SRAM_SIZE        (192)后直接死掉

7、UART 接受数据时出现HardFault,错误定位在crc校验。

6、使用指针未进行地址申请,造成野指针,非法访问

5、env给予空间不足;造成不能正确存储读取数据

4、线程调用其他函数,空间过小会死掉

3、can't find timer6 device!

2、网络下载文件失败显示数组或者内存不足

1、flash出现警告[Flash] Warning: Sector header check failed. Format this sector (0x00001000).

二、git使用

5、使用git  有的会出现不在本地分上。

4、如何使用git将分支branch合并到主干master上

①新建分支并切换

②切换到主干master

③合并某个分支到主干master

④合并后删除分支信息

3、本地git远程地址替换

2、warning: adding embedded git repository: git/

1、git log --graph --all查看所有分支的提交修改

四、cubemx

1、使用cubemx生成keil工程后,原有keil配置丢失

六、visual stdio code使用

2、vscode 不能跳转到指定函数,需要安装C/C++浏览插件

1、函数备注

使用libmodbus库过程中,用串口URAT4与UART3同样配置,3不能读取数据

rtt中断中不能使用malloc

段错误原因查找

keil

MDK调试进入B .挂起时可能出现的问题


一、rt-thread使用

18、h750,使用串口打印,或者其他,char类型数据会变成0xffffff,

现象:

1、使用串口打印,发哦送那个数据应该是char型,可是打印出来发现是short型,

2、使用qboot升级,写入qspi数据0x08000地址就会出现错误,变成0xffff8000,遇到0x8000,就会出现

暂时解决办法:发现的地方使用&ff,只取一个字节

17、H750使用qspi,配置正确但是不能使用问题。

现象:使用cubemx配置qspi,但是与芯片通信失败,

解决:cubemx配置引脚,默认是使用的事低速速率,需要把引脚速率配置高。

16、LSE晶振初始化会出现一定的失败几率

现象:不断按复位键会出现死掉的原因。死在晶振那里。过一会会进行重新启动。

20210907——也会出现开机启动慢,老是重启问题,原因工作环境恶略,造成串口受干扰,串口修改为下拉输入之后解决启动慢,重启问题。

调试界面出现移植操作r0寄存器

LSE那个确实是bug,
cube生成的代码是:
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_HSI48
                              |RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
只要改成:
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
 

改完就可以了

15、串口队列溢出的问题

[W/UART] Warning: There is no enough buffer for saving data, please increase the RT_SERIAL_RB_BUFSZ option.

线程优先级调高试试

其他线程影响了串口接收线程,或是中断影响了串口中断

14、升级失败问题

12988] W/UART: Warning: There is no enough buffer for saving data, please increase the RT_SERIAL_RB_BUFSZ option.

[218917] E/at.skt: AT socket (1) receive timeout (40000)!
[218931] I/http_ota: Download: 65|[=================================================================>                
[258943] E/at.skt: AT socket (1) receive timeout (40000)!
[258949] E/web: receive data timeout.
[258954] E/http_ota: Exit: server return err (-2)!
[259064] E/at.clnt: execute command (AT+CIPCLOSE=1) failed!

赋予空间不足,

13、rt-thread PWM1 CH1 CH1N 无法同时使用问题

现象:

原因:

解决办法:

static rt_err_t drv_pwm_enable(TIM_HandleTypeDef *htim, struct rt_pwm_configuration *configuration, rt_bool_t enable)
{
    /* Converts the channel number to the channel number of Hal library */
    rt_uint32_t channel = 0x04 * (configuration->channel - 1);

    if (!enable)
    {
        HAL_TIM_PWM_Stop(htim, channel);
        HAL_TIMEx_OCN_Stop(htim, channel);
    }
    else
    {
        HAL_TIM_PWM_Start(htim, channel);
        HAL_TIMEx_OCN_Start(htim, channel);     
    }

    return RT_EOK;
}

libraries\HAL_Drivers\drv_hwtimer.c(86): error:  #20: identifier "TIM1_CONFIG" is undefined

12、使用换用c8芯片不能进入main函数,会出现HardFault的诊断错误

现象:

原因:

解决办法:

原因上次使用的芯片ram空间64k这次的是20k

11、Fnction[rt_malloc] shall not be used in ISR

现象:

原因:

解决办法:

(0) assertion failed at function:rt_malloc, line number:280

 char *buf;
 buf = rt_malloc(64);

改为
 char buf[64];

10、新建工程后,出现不能再次下载情况boot0置高。

现象:

原因:

解决办法:

晶振配置错误

可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式。

Main Flash memory

是STM32内置的Flash,一般我们使用JTAG或者SWD模式下载程序时,就是下载到这个里面,重启后也直接从这启动程序。

System memory

从系统存储器启动,这种模式启动的程序功能是由厂家设置的。一般来说,这种启动方式用的比较少。系统存储器是芯片内部一块特定的区域,STM32在出厂时,由ST在这个区域内部预置了一段BootLoader, 也就是我们常说的ISP程序, 这是一块ROM,出厂后无法修改。一般来说,我们选用这种启动模式时,是为了从串口下载程序,因为在厂家提供的BootLoader中,提供了串口下载程序的固件,可以通过这个BootLoader将程序下载到系统的Flash中。但是这个下载方式需要以下步骤:

Step1:将BOOT0设置为1,BOOT1设置为0,然后按下复位键,这样才能从系统存储器启动BootLoader

Step2:最后在BootLoader的帮助下,通过串口下载程序到Flash中

Step3:程序下载完成后,又有需要将BOOT0设置为GND,手动复位,这样,STM32才可以从Flash中启动可以看到, 利用串口下载程序还是比较的麻烦, 需要跳帽跳来跳去的,非常的不注重用户体验。

9、移植后出现使能ping功能,现在是可以ping通,但是提示getaddinfo error。

现象:

原因:

解决办法:

8、F407制作软件包,修改#define STM32_SRAM_SIZE        (192)后直接死掉

现象:

原因:

解决办法:

程序卡在 rt_hw_hard_fault_exception函数里的while(1)循环,串口也没打印数据

修改为

#define STM32_SRAM_SIZE        (128)
#define STM32_SRAM_END         (0x20000000 + STM32_SRAM_SIZE * 1024)

F4 的 RAM 不是连续的,是 128 + 64 的,其中 64K 是专用 RAM

7、UART 接受数据时出现HardFault,错误定位在crc校验。

现象:

原因:

解决办法:

crc = Modbus_CRC16(&modbus.rcbuf[0],modbus.recount-2); 

modbus.recount= 0;

6、使用指针未进行地址申请,造成野指针,非法访问

5、env给予空间不足;造成不能正确存储读取数据

4、线程调用其他函数,空间过小会死掉

(rt_object_get_type((rt_object_t)thread) == RT_Object_Class_Thread) assertion failed at function:rt_thread_control, line number:626 

[5341] W/ParamMgr: set time:1610297162sec
msh />[5393] I/at.clnt: AT client(====>>rtc_set_timestamp Sun Jan 10 16:46:02 2021

 DmyStateSave.drug_reg.unit_type###0####
======>>rugprogress.step:0 
======>>myStateSave.drug_reg.drug_step:0
 1³õʼ»¯³É¹¦0####
V1.3.0) on device uart3 initialize success.
[6194] D/esp[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1314) Trigger a GC check after created ENV.
32: esp3[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1210) The remain empty sector is 1, GC threshold is 1.
2 device initialize start.
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00000000
[6311] I/esp32: esp32 device wifi is disconnect.
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00001000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00002000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00003000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00004000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00005000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1126) Moved the ENV (RptPeriod) from 0x00006581 to 0x00000010.
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00006000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00007000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00008000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00009000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x0000A000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x0000B000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x0000C000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x0000D000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x0000E000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1126) Moved the ENV (MediLog) from 0x0000FC61 to 0x00000033.
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x0000F000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00010000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00011000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00012000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00013000
[9131] I/esp32: esp32 device wifi is connected.
[9146] D/esp32: AT version:1.1.3.0(5a40576 - Nov 28 2018 12:50:55)
[9153] D/esp32: SDK version:v3.0.7
[9157] D/esp32: compile time:Dec 21 2018 09:04:56
[9162] D/esp32: Bin version:1.1.3(WROOM-32)
[9167] D/esp32: 
[Flash] (packages\EasyFlash-v4.1.0\src[9185] I/esp32: esp32 device wifi is disconnect.
\ef_env.c:1190) Collect a sector @0x00014000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1126) Moved the ENV (aliy_device_secret) from 0x00015C41 to 0x0000034E.
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1126) Moved the ENV (aliy_device_name) from 0x00015C8B to 0x00000398.
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1126) Moved the ENV (aliy_product_key) from 0x00015CC9 to 0x000003D6.
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1126) Moved the ENV (updateurl) from 0x00015E72 to 0x00000409.
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1126) Moved the ENV (getTime) from 0x00015ED1 to 0x00000468.
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1126) Moved the ENV (DevStatDataSave) from 0x00015EFA to 0x00000491.
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00015000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1126) Moved the ENV (MediParam) from 0x00016379 to 0x0000058C.
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00016000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00018000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00019000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x0001A000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x0001B000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x0001C000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x0001D000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x0001E000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x0001F000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00020000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00021000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00022000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00023000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00024000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00025000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00026000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00027000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00028000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00029000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x0002A000
[11381] I/esp32: esp32 device wifi is connected.
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x0002B000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x0002C000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x0002D000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x0002E000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x0002F000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00030000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00031000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00032000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00033000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00034000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00035000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00036000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00037000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00038000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x00039000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x0003A000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x0003B000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x0003C000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x0003D000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x0003E000
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1126) Moved the ENV (__ver_num__) from 0x0003F033 to 0x000008F5.
[Flash] (packages\EasyFlash-v4.1.0\src\ef_env.c:1190) Collect a sector @0x0003F000
 2³õʼ»¯³É¹¦0####

 tid_process ok
 [13332] I/esp32: esp32 device network initialize successfully.
[13339] D/esp32: network interface device(esp32) set up status,esp32_netdev_set_up

[26269] I/proto: ==>>1036
========>>1610297183
[26275] D/proto: message size:94

3、can't find timer6 device!

现象:

原因:

解决办法:

解决添加配置:

2、网络下载文件失败显示数组或者内存不足

现象:获取链接后,显示没有足够空间接受数据。

原因:flash擦除消耗大量时间,造成数据存放出问题

方法:接收前提前擦出flash可以解决此问题;

Content(attachment;filename=update.img).glocation:(NULL)
http file_size:1024572
[46246] I/http_ota: Start erase flash (updisplay) partition!
[48742] E/at.skt.esp32: no memory receive buffer(29[48748] W/UART: Warning: There is no enough buffer for saving data, please increase the RT_SERIAL_RB_BUFSZ option.
20).
[49104] E/at.clnt: read line failed. The line data length is out of buffer size(1024)!
[49359] E/at.clnt: read line failed. The line data length is out of buffer size(1024)!
[49523] E/at.clnt: read line failed. The line data length is out of buffer size(1024)!
[49779] E/at.clnt: read line failed. The line data length is out of buffer size(1024)!
[49943] E/at.clnt: read line failed. The line data length is out of buffer size(1024)!
[50153] E/at.clnt: read line failed. The line data length is out of buffer size(1024)!
[50406] E/at.clnt: read line failed. The line data length is out of buffer size(1024)!
[50573] E/at.clnt: read line failed. The line data length is out of buffer size(1024)!
[50781] E/at.skt: No memory for receive packet table!
[50992] E/at.clnt: read line failed. The line data length is out of buffer size(1024)!
[51201] E/at.clnt: read line failed. The line data length is out of buffer size(1024)!
[51456] E/at.clnt: read line failed. The line data length is out of buffer size(1024)!
[51620] E/at.clnt: read line failed. The line data length is out of buffer size(1024)!
[51875] E/at.clnt: read line failed. The line data length is out of buffer size(1024)!
[52039] E/at.clnt: read line failed. The line data length is out of buffer size(1024)!
[52050] I/http_ota: Erase flash (updisplay) partition success!
[52058] E/http_ota: No memory for http ota!
[52165] E/at.clnt: AT create response object failed! No memory for response object!
[52175] E/at.skt.esp32: no memory for resp create.
[52248] E/at.clnt: read line failed. The line data length is out of buffer size(1024)!
[52378] E/at.clnt: read line failed. The line data length is out of buffer size(1024)!
[55186] E/at.skt.esp32: no memory receive buffer(2400).
[55650] E/at.clnt: read line failed. The line data length is out of buffer size(1024)!
[55814] E/at.clnt: read line failed. The line data length is out of buffer size(1024)!
[56067] E/at.clnt: read line failed. The line data length is out of buffer size(1024)!
[56233] E/at.clnt: read line failed. The line data length is out of buffer size(1024)!
[56442] E/at.clnt: read line failed. The line data length is out of buffer size(1024)!
[56697] E/at.clnt: read line failed. The line data length is out of buffer size(1024)!
[56861] E/at.clnt: read line failed. The line data length is out of buffer size(1024)!
[57072] E/at.skt.esp32: no memory receive buffer(2400).

1、flash出现警告[Flash] Warning: Sector header check failed. Format this sector (0x00001000).

[Flash] Warning: Sector header check failed. Format this sector (0x00001000).
[Flash] Warning: Sector header check failed. Format this sector (0x00002000).
[Flash] Warning: Sector header check failed. Format this sector (0x00003000).
[Flash] Warning: Sector header check failed. Format this sector (0x00004000).
[Flash] Warning: Sector header check failed. Format this sector (0x00005000).
[Flash] Warning: Sector header check failed. Format this sector (0x00006000).
[Flash] Warning: Sector header check failed. Format this sector (0x00007000).
[Flash] Warning: Sector header check failed. Format this sector (0x00008000).
[Flash] Warning: Sector header check failed. Format this sector (0x00009000).
[Flash] Warning: Sector header check failed. Format this sector (0x0000a000).
[Flash] Warning: Sector header check failed. Format this sector (0x0000b000).

二、git使用

5、使用git  有的会出现不在本地分上。

现象:

原因:

解决办法:

因此,我在存储库中做了一些工作,当我即将提交时,我意识到我目前不在任何分支上。

发生这种情况在使用子模块的时候很多,而且我可以解决这个问题,但是这个过程很乏味,我一直在想,必须有一个更简单的方法来做到这一点。

有没有一种简单的方法可以在保留更改的情况下恢复分支? 

解决方案

如果您还没有提交: 

 git stash     #存储
 git checkout  #某些分支
 git stash pop 
如果您已经提交并且没有改变任何内容:
 git log --oneline -n​​1#这会给你SHA 
 git checkout some-branch 
 git merge $ {如果你已经提交并完成了额外的工作:
 git stash 
 git log --oneline -n​​1#这会给你SHA 
 git checkout some-branch 
 git merge $ {commit-sha} 
 git stash pop 

4、如何使用git将分支branch合并到主干master上

①新建分支并切换

>>git chechout -b <branchName>

添加备注信息

开发完毕后需要在当前分支上提交修改后的文件,使用如下命令:

>>git add README.MD
>>git commit -m "备注信息"

②切换到主干master

使用如下命令从当前分支切换到主干master上:

git checkout master

③合并某个分支到主干master

使用如下命令合并分支:

>>git merge <branchName>

④合并后删除分支信息

使用如下命令删除分支:

>>git branch -d <branchName>

虽然前面我们删除了分支,但由于删除之前已经将其合并到master主干上,故其还保留在master中,使用checkout命令仍然可以签出相应的分支。

3、本地git远程地址替换

$ git remote -v
origin git@github.com:xxx/example.git (push)

重新制定项目git远程路径

重置当前项目的远程路径为target目标

$ git remote set-url origin git@git.xxx.com:xxx/example.git

确认是否更改成功

2、warning: adding embedded git repository: git/

当前目录下面有.git文件夹------默认是隐藏的,直接将.git文件夹掉,再重新git add .

则不再有报警提示,按正常的上传步骤上传代码即可。

1、git log --graph --all查看所有分支的提交修改

Please commit your changes or stash them before you switch branches.

四、cubemx

1、使用cubemx生成keil工程后,原有keil配置丢失

六、visual stdio code使用

2、vscode 不能跳转到指定函数,需要安装C/C++浏览插件

1、函数备注

/************************************************* 
Copyright (C), 1988-1999, Tech. Co., Ltd. 
File name: // 文件名 
Author:  
Version:  
Date: // 作者、版本及完成日期 
Description: // 用于详细说明此程序文件完成的主要功能,与其他模块 
// 或函数的接口,输出值、取值范围、含义及参数间的控 
// 制、顺序、独立或依赖等关系 
Others: // 其它内容的说明 
Function List: // 主要函数列表,每条记录应包括函数名及功能简要说明 
1. .... 
History: // 修改历史记录列表,每条修改记录应包括修改日期、修改 
// 者及修改内容简述  
1. Date: 
Author: 
Modification: 
2. ... 
*************************************************/

使用libmodbus库过程中,用串口URAT4与UART3同样配置,3不能读取数据

这是什么原因

rtt中断中不能使用malloc

/************************************************* 
Date: 21/2/28 
Description: 对数组排序,去掉最大值与最小值,其余值
求平均为称重数据 
Value: 
Return:
*************************************************/ 
int my_get_weigh(void)
{
 int sum = 0;
int *weigh_drug_=RT_NULL;
weigh_drug_ = rt_malloc(sizeof(weigh_drug));

     for (int i = 0; i < VALUE_LEN - 1; i++) 
   { 
    weigh_drug_[i] = weigh_drug[i];
   }
    for (int i = 0; i < VALUE_LEN - 1; i++) 
   { 
        for (int j = 0; j < VALUE_LEN - 1 - i; j++) 
       {
            if (weigh_drug_[j] > weigh_drug_[j+1]) 
             {        // 相邻元素两两对比
                int temp = weigh_drug_[j+1];        // 元素交换
                weigh_drug_[j+1] = weigh_drug_[j];
                weigh_drug_[j] = temp;
             }
        }
    }
   for(int i = 1;i<VALUE_LEN-1;i++)
    {
         sum += weigh_drug_[i];
    }
rt_free(weigh_drug_);
 return sum/(VALUE_LEN-2);
}

段错误原因查找

psr: 0x0100000f
r00: 0x20002800
r01: 0x20007cc0
r02: 0x00000000
r03: 0x7fffffff
r04: 0x00000001
r05: 0x20007cac
r06: 0x20000118
r07: 0x00001150
r08: 0x00000001
r09: 0xdeadbeef
r10: 0xdeadbeef
r11: 0xdeadbeef
r12: 0x00000000
 lr: 0x08054d3f
 pc: 0x08050a96
hard fault on handler

bus fault:
SCB_CFSR_BFSR:0x04 IMPRECISERR 

1:内存溢出或则访问越界。

2:堆栈溢出。

发生异常后我们可以首先查看LR寄存器的值,确认当前使用的堆栈是MSP还是PSP,然后找到相对应的堆栈指针,并在内存中查看相对应堆栈的内容,内核将R0~R3,R12,LR,PC,XPRS寄存器依次入栈,其中LR即为发生异常前PC将要执行的下一条指令地址。

手把手教你查找stm32 HardFault_Handler调试及问题方法_u013184273的博客-CSDN博客_hardfault_handler 原因查找

STM32硬件错误HardFault_Handler的处理方法_anbaixiu的博客-CSDN博客

查一下 LR 寄存器地址,是哪一个函数。分析上函数前后有没有逻辑问题。

把栈空间放大试试看

keil

MDK调试进入B .挂起时可能出现的问题

中断没有找到。

总结:程序卡死在B.处,一般都是有中断没有处理,仔细检查下相关中断的配置和处理函数,找出错误即可。

keil空间不足

使用高优化等级

keil编译速度慢

去除编译信息

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用stm32裸机或者rtt系统遇到的坑 的相关文章

  • MAVROS二次开发(四)添加消息处理插件

    MAVROS二次开发 四 添加消息处理插件 mavros插件所在路径 xff1a catkin ws src mavros mavros src plugins 1 自定义消息处理插件的编写 参考代码 xff1a catkin ws src
  • MAVROS二次开发(五)进行测试

    MAVROS二次开发 五 进行测试 1 测试环境 PX4 xff1a v1 10 1 xff08 含自定义mavlink消息收发 xff09 ROS xff1a KineticUbuntu xff1a 16 04LTSQGC xff1a S
  • ROS2+PX4开发环境配置

    一 ROS2安装 Ubuntu18 04的ros2版本 xff1a Eloquent 参考网址 xff1a https docs ros org en eloquent Installation Linux Install Debians
  • Windows10下Airsim+PX4(WSL2)+MAVROS仿真环境搭建

    一 Windows10下WSL2安装 1 1 WSL2的安装与配置 首先在Windows10下启用WSL xff0c 以管理员身份打开 PowerShell 工具并运行以下命令 dism span class token punctuati
  • Windows10通过vcpkg快速配置PCL库

    1 安装C 43 43 包管理工具vcpkg https github com microsoft vcpkg span class token function git span clone https github com micros
  • 微软Chromium版Edge浏览器正式稳定版

    微软Chromium版Edge浏览器正式稳定版 近期微软Chromium版Edge浏览器正式稳定版下载已经泄露 xff0c 版本77 0 235 9 此版本没有div什么的那些 xff0c 和之前的图标一样 当安装新Edge稳定版之后 xf
  • C++疑难问题

    acwing中的算法疑惑 1 为什么确定范围 要 43 10 在使用归并排序和快速排序等方法时有效率问题 xff0c 确定范围在1e6 但是选择的是1e 43 10 2 C 43 43 除二乘2简单方法以及算法效率问题 算法效率速度排行 x
  • 用python的scipy中的odeint来解常微分方程中的一些细节问题(适用于小白)

    用python的scipy中的odeint来解常微分方程中的一些细节问题 xff08 适用于小白 xff09 写在前面 最近有些需要解决常微分方程的问题 xff0c 网上查了很多教程都不是很明晰 xff0c 便自己研究了一段时间 xff0c
  • VsCode使用Git连接Gitee和GitHub

    VsCode连接GitHub和Gitee VsCode连接GitHub和Gitee一 软件安装1 安装git2 vscode 二 在Github或者Gitee上创建空的仓库 项目1 在Github创建空的仓库 项目2 在Gitee创建新项目
  • Julia配置【使用VScode中的Jupyter编写Julia的方法】

    简略目录 安装Julia切换国内源安装Ijulia插件VSCode配置 首次编写日期 xff1a 2021 07 10 安装Julia 官网 xff0c 一路默认即可 xff0c 记得添加PATH xff0c 安装位置可以自定义 切换国内源
  • VSCode配置C++环境(MSVC)

    VSCode配置C 43 43 环境 xff08 MSVC xff09 最近心血来潮 xff0c 想用一下微软的VSCode写一下C 43 43 xff0c 然而第一步就卡住了 xff0c 竟然不会配置C 43 43 环境 xff0c 陆陆
  • GTSAM理解

    1 xff1a GTSAM是什么 参考博文 xff1a gtsam xff1a 从入门到使用 1 xff1a 是什么 xff1a GTSAM是用于计算机视觉和多传感器融合方面用于平滑和建图的C 43 43 库 xff0c GTSAM采用因子
  • tag与branch的区别

    1 什么是tag 什么时候应该创建一个tag 项目的版本管理中 每当一个release版本发布时 需要做一个记录 以便以后需要的时候能查找特定的版本 这时候就用到tag这个功能 Git中的tag指向一次commit的id xff0c 通常用
  • 简历中“项目经历“该如何写?

    前言 找工作 xff0c 简历是最关键的一步 xff0c 只有通过了简历筛查才能往下继续进行 很多人写简历 xff0c 都是在记录流水账 xff0c 看来没有任何平淡寡味 其实简历的核心价值就在于游说 hr 和面试官 xff1a 看我 xf
  • 深度学习解释:Precision、Recall、IoU、Ap/mAp

    深度学习的指标都是 xff08 APAverage Precision xff09 二分类情况下的Precision xff08 查重率 xff09 和Recall xff08 查全率 xff09 对于二分类问题 xff0c 可将样例根据其
  • input上传文件图片本地预览

    lt form gt lt input type 61 34 file 34 id 61 34 avatar 34 name 61 34 avatar 34 gt lt button gt 点击上传 lt button gt lt form
  • colmap pthread 错误

    Looking for include file pthread h Looking for include file pthread h found Looking for pthread create Looking for pthre
  • 全球系留无人机系统行业调研及趋势分析报告

    本文调研和分析全球系留无人机系统发展现状及未来趋势 xff0c 核心内容如下 xff1a xff08 1 xff09 全球市场总体规模 xff0c 分别按销量和按收入进行了统计分析 xff0c 历史数据2017 2021年 xff0c 预测
  • 安装arm-none-eabi版本添加环境变了还是出错问题解决

    安装arm none eabi版本添加环境变了还是出错问题解决 问题解决 问题 已经在 profile文件里面添加了如下命令 span class token keyword export span span class token con
  • 基于ubuntu16.04 塔建PX4编译环境

    基于ubuntu16 04 塔建PX4编译环境 基于ubuntu16 04 塔建PX4编译环境环境塔建官网网址 xff1a 权限设定删除modemmanager更新软件包列表 xff0c 并为所有PX4构建目标安装以下依赖项 安装pyulo

随机推荐

  • APM编译记录-基于OMNIBUSF4-V3飞控板

    APM编译记录 基于OMNIBUSF4 V3飞控板 APM编译记录Bootloader问题固件编译 APM编译记录 初次使用APM xff0c 根据博客文章以及结合官方教程摸索 xff0c 发现和PX4还是有挺大差别的 xff0c 目前系统
  • ubuntu16.04基于eclipse搭建px4编译环境+Jlink调式

    ubuntu16 04基于eclipse搭建px4编译环境 43 Jlink调式 xff09 ubuntu16 04基于eclipse搭建px4编译环境 43 Jlink调式一 工具获取1 eclipse2 jlink3 jdk4 arm
  • Ardupilot通过mavlink + 4way_protocol对BLHeli_s电调的读写

    Ardupilot通过mavlink 43 4way protocol对BLHeli s电调的读写 前言上位机1 Mission Planner2 BLHeliSuite3 BLHeliSuite32 Ardupilot 源码编译1 启动B
  • C/C++中 float与uint16类型转换方法

    C C 43 43 中 float与uint16类型转换方法 为什么要做float与uint16互相转换方法一 xff1a 方法二 xff1a 为什么要做float与uint16互相转换 此需求在串口通信时常常会被用到 xff0c 串口只能
  • Keil V5仿真出现*** error 65: access violation at 0x40021000 : no ‘read‘ permission 解决办法

    Keil V5仿真出现 error 65 access violation at 0x40021000 no 39 read 39 permission 解决办法 问题解决办法1 进入debug的map设置地址2 新建debug ini配置
  • Ardupilot-NMEA协议的GNSS处理优化

    Ardupilot NMEA协议的GNSS处理优化 Ardupilot NMEA协议的GNSS处理优化原固件存在的问题解决办法 Ardupilot NMEA协议的GNSS处理优化 原固件存在的问题 1 当所使用的GNSS模块数据反馈频率不到
  • FMT-模型在环仿真(MIL)

    前提条件 matlab版本是2018B及以上版本下载好了FMT Model工程 设置MIL仿真 打开matlab xff0c 进入到FMT Model目录 xff0c 左键双击打开FMT Model prj 打开过程它自己会初始化工程 xf
  • 【移植Ardupilot的日志记录方法到linux上】

    移植Ardupilot的日志记录方法到linux上 说明日志结构组成日志写入操作预定义日志项运行时添加日志项的方法 单例测试编译方法查看数据其他 说明 采用二进制文件记录 xff0c 可在mission planer查看 支持所有数据类型记
  • 一、linux内核源码分析(内核源码结构组成)

    应该说是把linux内核这部分知识提前了 xff0c 因为坐公交需要点视频来打发一下时间 xff0c 感觉linux内核的视频就不错 xff0c 就顺便把linux内核提前了 这一次也是打算视频和书一起看 xff0c 然后总结 书的话还是推
  • Android开发:使用Lambda表达式高效开发

    简介 xff1a JDK1 8后java开始支持Lambda表达式 xff0c 使用Lambda表达式我们就可以在Android中替换匿名类的写法 本来一个Button点击事件监听要写6行代码 xff0c 我们1行就可以搞定 1 引入依赖
  • ros开发与室内定位(一)

    ROS下搭建 UWB 下行数据解析驱动 Linux内核版本 xff1a ubuntu 15 05 ROS版本 xff1a indigo 搭建局域网 xff0c 向网内的主机提供室内标签实时的定位信息 xff0c 该Demo可以利用UDP协议
  • ubuntu1604 ROS下实时双目ORB-SLAM的环境搭建

    本文主要记录本萌新从零开始搭建ORB SLAM环境的一个过程 xff0c 因为第一次装双系统 xff0c 本来就遇到了很多的问题 来来回回装了好多天才弄好 xff0c 中间遇到的主要问题和步骤参考放在下边 xff0c 可能帮助到别人的话就倍
  • 机器学习题目汇总

    1 深度学习中的激活函数需要具有哪些属性 xff1f 计算简单非线性具有饱和区几乎处处可微 ABD 解析 xff1a xff08 1 xff09 非线性 xff1a 导数不能是常数 xff08 2 xff09 几乎处处可微 xff1a si
  • 天猫精灵云云对接

    天猫精灵云云对接 一 技能开发二 产品开发 接入过程出现了一些问题 xff0c 特此记录 xff0c 用来给朋友们参考 xff0c 随意记录 xff0c 不接受批评 前情提要 xff1a 注册并认证 天猫精灵开放平台 AliGenie 一
  • 关于Altium Designe中元器件添加PDF的简述

    一 缘由 xff1a 今天无意之间在书本上看到关于元器件的Datasheet添加 xff0c 也想起自己曾经为了查询元器件datasheet xff0c 费了不少时间 xff0c 所以写下了此篇博文 二 关于添加步骤 xff1a 1 打开自
  • opencv面试知识点

    文章目录 一 opencv基础1 OpenCV中cv Mat的深拷贝和浅拷贝问题2 opencv常用数据结构和函数2 1 QImage和Mat之间的转换 3 颜色空间 RGB HSV4 基本图形的绘制 二 opencv xff08 core
  • VSCode 整理格式快捷键

    Shift 43 Alt 43 f
  • 【情人节特辑】相机也成双——直观理解对极几何中的四个重要矩阵(外参矩阵、内参矩阵、基本矩阵、本质矩阵)

    祁子禹 引言 在奔逸不羁的童年 xff0c 笔者对理科知识的好奇无际无边 某天曾在外婆家的煤棚子里一通乱翻 xff0c 缴获了大舅学生时代的几何光学课本 xff0c 不料遭遇开幕雷击 xff1a 人的眼球好比照相机 xff0c 我们要为革命
  • 【2022小米秋招(2023校招)】软件开发方向 笔试题1——链表反转

    题目 xff1a 给你单链表的头指针 head 和两个整数 left 和 right xff0c 其中 left lt 61 right 请你反转从位置 left 到位置 right 的链表节点 xff0c 返回反转后的链表 输入描述 xf
  • 使用stm32裸机或者rtt系统遇到的坑

    目录 一 rt thread使用 16 LSE晶振初始化会出现一定的失败几率 15 串口队列溢出的问题 14 升级失败问题 13 rt thread PWM1 CH1 CH1N 无法同时使用问题 12 使用换用c8芯片不能进入main函数