Harmony Configurator配置编程教程及试验

首先下载官方的开发工具,包括mplab、xc32、harmony,但是要想在mplab中创建harmony的工程,得按照help_harmony_vol_i.pdf中的说明,先在mplab中安装harmony的plug-in。
接下来进入我们的主题——杀鸡就要用牛刀,点灯怎么用牛刀呢?那就把ucos跑起来吧,在任务中去点灯!
原本的计划是拿micrium官网pic32的bsp包过来移植,但是简单地看了看harmony的介绍文档之后,发现它竟然支持常用的几款rtos,其中就有ucos-iii,随即决定用harmony创建ucos的工程。创建工程、配置系统时钟这两步和参考文章中的方法都一样,不罗嗦了;接下来开始就要自己配置harmony configurator了
1. 在options中将third party libraries中的uc/os-iii打开
2. 在_sys_tasks中点灯,后面的延迟1000个tick对于系统的默认配置来说就是延时1秒
然后我就发现没有其他需要配置的了,难道移植ucos的工作就这么结束了?这么简单?不可能吧???赶快生成代码、编译、加载到板子上跑一下,果然没那么顺利,灯不闪。。。没办法,只能debug定位了。好在板子上自带jtag调试模块,打开mplab的debug功能,发现板子死在这儿了,异常!!!估计又得调一阵了。。。
不得不说mplab的调试功能还是相当强大的,call stack里还能找到发生异常的点,竟然在kernel中死了,按说ucos的kernel已经很成熟了,不应该出这种低级问题
在前一句打个断点看看异常是怎么发生的,结果令人诧异:就在给*p_ts赋值的时候发生了异常!这就是个局部变量啊,怎么能导致异常呢,看看它的地址确实有些诡异
翻开pic32mx470的芯片手册,找到芯片的memory map,发现0x9d0035fc竟然是program flash空间的地址,就这么用指针赋值的话肯定非法,可是p_ts是什么时候变成的这个值呢?
再仔细往前找,发现在发生异常前kernel有发生过调度,难道是调度之后寄存器恢复错了?再跟下去发现确实是这样,只要os调度后p_ts就不对了。我们知道ucos的任务现场是存在栈中的,难不成有栈越界?工程里又没什么应用代码,应该不是应用代码的问题,那会不会是配置的问题呢?查了下配置默认的最小堆栈size是64,系统中除了idle任务的堆栈是64,其他的都至少是512。mips和arm不一样,有32个通用寄存器,难不成64的堆栈size对保存现场来说太小了?改成128试试
修改之后重新生成代码、编译、下载,果然跑起来了,看来默认的64的idle任务堆栈确实设置小了
用ucos-iii点灯完成,也算小试了一把牛刀,但是没有大规模的改代码,就这么简单的改了改配置就把rtos跑了起来,这让我心里隐隐地觉得有些不安,有什么焦虑呢,。

我国5G再获进展 新增10M 5G低频频段
中国移动联合华为举办论坛,为用户打造美好数字化生活体验
【大大表情包】数字化转型好伙伴!钢铁大大表情包全新升级!
六种新型存储技术盘点
魅族pro7什么时候上市?魅族pro7最新消息:魅族Pro 7海报曝光发布时间+售价,外加Pro7 Plus也有可能一起亮相
Harmony Configurator配置编程教程及试验
东芝无惧芯片价格下跌,将量产96层3D NAND Flash
甲醛污染已经成为威胁人类健康水平和幸福指数的重要因素 甲醛检测市场需求也将扩大
仪器仪表行业急拓新领域,科研创新能力是硬伤
华为助力上海金融行业数字化转型
第八届国际测试仪器应用技术大会概况
提效率和降成本,电机电控发展的必由之路
泸上新ipad港货充足 ipad2更受热捧
东芝U364随闪U盘评测 实在是业界良心
ZigBee串口数据转换电路设计
IP防护等级怎么定,IP防护等级数字时什么意思
Parrot Bebop 2无人机的资料和内部结构详细拆机分析
关于可燃气体报警器对机房蓄电池产生的氢气检测
关于延时继电器触发差异
如何使用低价格打造智能家居生活