添加超声波模块、OLED显示以及内存配置

添加超声波模块以及OLED显示

经过正点原子以及系列配置文档的学习下,成功向操作系统添加超声波模块以及OLED,简要实现了超声波测距串口数据传回以及oled显示数据功能

主要遇到的问题如下

1、引脚重复定义问题

由于测试函数于最终移植函数之间存在差异,因此,在引脚配置问题上,需要重新进行引脚分配,优化空间处理!使其最终在开发板上正常使用

2、任务函数内存配置问题

关于内存配置问题,在FreeRTOS中是非常重要的一个环节,也许最终编译没有问题,但是一旦内存配置过低,就会导致程序崩溃卡死(如同拿一个2G内存的手机打王者荣耀的感觉),所以确定好程序的内存配置量非常重要!
并且,总的configTOTAL_HEAP_SIZE也是需要进行相关配置,否则内存分配也是不过关的

/************************************************************************************/
/*                         FreeRTOS与内存申请有关配置选项                             */
/************************************************************************************/
#define configSUPPORT_DYNAMIC_ALLOCATION        1               //支持动态内存申请
#define configTOTAL_HEAP_SIZE					((size_t)(8*1024))     	  
//系统所有总的堆大小,c8t6芯片内存是20kb,注意配置不要太大了,
//尤其是MCU容量很小的时候,否则应用程序可能内存不够用,导致任务程序崩溃!
//所以内存合理分配很重要!!!(此处可以大致理解为系统内存空间与应用空间的分配)
//最简单粗暴的方法就是由大到小去试,直到内存不够用为止,再稍微调大一点!!!
//任务堆栈大小	
#define START_STK_SIZE 		128       
//此处申请的内存是128个StackType_t,本程序中StackType_t表示为32位,即4个字节,
//所以最终申请的内存为128*4=512 B
//所以每个任务函数字节分配尤为重要!
//假设任务函数内包含一个500字节的数组如test[500];
//那么此时假设设置“#define START_STK_SIZE 50”,
//那么此任务函数最大内存仅有200b,显然内存不够,使任务卡死,此时就需要加大任务堆栈大小
//当然,如果任务加的足够大还卡死,那就是程序问题,不是内存不足问题了

实际应用中将这些都加起来是一件非常麻烦的工作,上面这些栈空间加起来的总和只是栈的最小需求,
实际分配的栈大小可以在最小栈需求的基础上乘以一个安全系数,一般取 1.5-2。上面的计算是我们用户
可以确定的栈大小,项目应用中还存在无法确定的栈大小,比如调用printf函数就很难确定实际的栈消耗。又比如通过函数指针实现函数的间接调用,因为函数指针不是固定的指向一个函数进行调用,而是根据不同的程序设计可以指向不同的函数,使得栈大小的计算变得比较麻烦。另外还要注意一点,建议不要编写递归代码,因为我们不知道递归的层数,栈的大小也是不好确定的。
针对内存分配问题,最简单粗暴的方法就是由大到小去试每一个任务函数,直到内存不够用为止,再稍微调大一点!!!

3、优先级配置问题

一般情况下,stm32程序中出现移位的,都是因为存在某几位单独控制类型(如优先级控制,设置为组4时,其对应值是3,所以即舍去低3位,依靠前5位进行优先级配置,共有2^5=32个优先级进行分配,而每次配置时都是写入低4位,因此需要移位控制)暂定如此,学习透彻再回来补充!

4、外部中断以及定时器配置问题
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值