FreeRTOS移植+点亮OLED任务线程

准备工作:
先下载了官方提供的手册、demo、固件包,并通读了一下(注意,mdk版本要求比较高!为了找个能用的keil折腾了很久):
制作裸机点灯代码
前面已经有‘探路者’把这部分做完了,我就不再叙述了,不过还是要自己动手移植一下,这样可以了解片子与f103等常用的芯片的区别。
添加freertos部分
这是第一次真正意义上自己独立移植了一次freertos^_^,没有遇到太多的障碍:
使用的freertos版本是正点原子f103光盘里面的,9.0版本
解压缩后,只需要复制freertos,而用不到*-plus:
freertos中,也有很多用不到的文件,请参考正点原子开源的freertos移植教程。
需要注意的地方是gd32的中断都放在了gd32f3x0_it.c中,需要屏蔽2个中断空函数,进而直接调用freertos内的同名函数:
并在systick_handler中加入调用freertos的时钟函数:
void systick_handler(void){ //led_spark(); delay_decrement(); #if (include_xtaskgetschedulerstate == 1) if (xtaskgetschedulerstate() != taskscheduler_not_started) { #endif xportsystickhandler(); #if (include_xtaskgetschedulerstate == 1) } #endif}  
主要freertos的栈设置要合理:
#define configtotal_heap_size ( ( size_t ) ( 2 * 1024 ) )  
program size: code=6068 ro-data=6448 rw-data=112 zi-data=4296
这样片子的可玩性还是挺高的。
移植正点原子oled代码:
这部分代码逻辑比较简单,看下正点原子的教程都可以很快搞定:
主要修改了正点原子通过位带操作控制引脚改为使用gd的库函数:
//---------------------------oled端口定义-------------------------- #define oled_cs(x) gpio_bit_write(gpiob,gpio_pin_0,(flagstatus)(x));#define oled_rst(x) gpio_bit_write(gpioa,gpio_pin_5,(flagstatus)(x));#define oled_dc(x) gpio_bit_write(gpiob,gpio_pin_1,(flagstatus)(x));#define oled_wr(x) gpio_bit_write(gpiob,gpio_pin_4,(flagstatus)(x));#define oled_rd(x) gpio_bit_write(gpiob,gpio_pin_5,(flagstatus)(x));  
最终完成移植:
总结
现在芯片都比较成熟,性能都过剩,这款芯片提供的资料也都够用,对于上手使用比较方便。后面自己做一些手表、物联网小产品,可以玩一下。


如何选择适合的气体检测仪,从哪几方面着手
半导体激光治疗仪的作用及原理
中国的区块链技术已在全球遥遥领先
福特如何把好牌打烂的,经历经济危机?
iPhone5s升级iOS12和iOS11对比:真的快多了
FreeRTOS移植+点亮OLED任务线程
走进智能终端/自连数据网关全面赋能可穿戴医疗设备
LM339双稳态触发电路制作的光控灯电路
LED显示屏出现的5种信号代码的含义
视晶无线VastLink-RT系列产品,满足环境下的机器人应用需求
中国科学院提出类果蝇决策的脉冲神经网络模型,人工智能实现趋利避害的行为
记忆体市场今年预期下滑24%!
半入耳式蓝牙耳机哪个好?半入耳蓝牙耳机推荐高性价比
AMD引领游戏与创作性能:新一代台式机处理器震撼登场
故障诊断方法有哪三种 CAN故障诊断方法介绍
半导体厂商银河微电IPO被否
电池配组工作应该如何高效进行,不同厂家电池能一起用吗
AD20如何取消点向导
同惠阻抗分析仪|TH2851-130压电晶体器件谐振测试
荣耀V20手机外观评测 可谓是下足了功夫