目录
13、rt-thread PWM1 CH1 CH1N 无法同时使用问题
12、使用换用c8芯片不能进入main函数,会出现HardFault的诊断错误
11、Fnction[rt_malloc] shall not be used in ISR
9、移植后出现使能ping功能,现在是可以ping通,但是提示getaddinfo error。
8、F407制作软件包,修改#define STM32_SRAM_SIZE (192)后直接死掉
7、UART 接受数据时出现HardFault,错误定位在crc校验。
1、flash出现警告[Flash] Warning: Sector header check failed. Format this sector (0x00001000).
4、如何使用git将分支branch合并到主干master上
2、warning: adding embedded git repository: git/
1、git log --graph --all查看所有分支的提交修改
1、使用cubemx生成keil工程后,原有keil配置丢失
2、vscode 不能跳转到指定函数,需要安装C/C++浏览插件
使用libmodbus库过程中,用串口URAT4与UART3同样配置,3不能读取数据
一、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 -n1#这会给你SHA
git checkout some-branch
git merge $ {如果你已经提交并完成了额外的工作:
git stash
git log --oneline -n1#这会给你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编译速度慢
去除编译信息