灵动微电子 MM32
直播中

guo8113

12年用户 188经验值
擅长:处理器/DSP 控制/MCU
私信 关注
[分享]

【MM32F103试用体验】+ FreeRTOS示例工程运行与评测

本帖最后由 guo8113 于 2016-7-23 17:44 编辑

    拿到开发板运行了几个感兴趣的示例工程,同时也发现了几个问题,在这里进行讨论。此帖会持续更新

    1.  Freertos的demo,首先感觉这个rtos的demo和BM的demo貌似不是一个人做的。哈哈,这不是重点。
       (1) 在FreeRTOS demo中有一点大家要注意,demo中的 FreeRTOSConfig.h里将系统时钟写为了固定的72MHZ:
        #define configCPU_CLOCK_HZ   ( ( unsigned long ) 72000000 )
       所以假如,你系统时钟不再是72MHZ,这里需要修改。

       更好的方法应该是在FreeRTOS  port.c里声明外部变量:extern uint32_t SystemCoreClock;
       而变量SystemCoreClock是在CMSIS头文件system_mm32x103.c里定义并根据时钟配置更新的。然后就可以把 FreeRTOSConfig.h里时钟定义改为#define configCPU_CLOCK_HZ   SystemCoreClock

      (2) 在移植FreeRTOS时,灵动将startup.s里的中断入口改了,也就是说与其他的程序用的不是同一个startup_MM32x103_md.s文件.如下图,左边为FREERTOS的startup文件,右边为device下的startup文件
fr.PNG
我觉得,还是在FreeRTOSConfig.h里定义一下映射关系比较直观一点:
/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS
standard names. */
#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler
#define xPortSysTickHandler SysTick_Handler
这样就需要修改startup.s文件了。

(3) 用FreeRTOS遇到了一个问题,demo中的delay函数是用systick实现的,那我用RTOS时 systick是系统时钟滴答调度用,这时很多驱动在RTOS里就用不了了吧?
这点灵动做的还可以,看了下ucos的代码,实现了UCOS上的delay us与ms函数。于是模仿之,写了下FreeRTOS的:
code.PNG


最后把DK21_touchpanel用FreeRTOS实现了一把:一个线程运行原来的touchpanel,一个线程呼吸灯。
代码见附件(附件中2个线程都操作LED了,所以呼吸灯闪起来没规律)。解压之后把smart prj目录与DK103R_lib平行放置。更改下core_m3.h的路径,指向自己的KEIL安装路径即可:
set.PNG

    smart prj.zip (2016-7-23 17:14 上传)

    411.87 KB, 阅读权限: 20, 下载次数: 5

回帖(7)

汪俊峰

2016-7-23 09:37:29
楼主高手啊,,体验的如此细致,,,,赞一个
举报

guo8113

2016-7-23 10:26:00
引用: 哭泣的眼泪 发表于 2016-7-23 09:37
楼主高手啊,,体验的如此细致,,,,赞一个

正好在学习FreeRTOS
举报

汪俊峰

2016-7-23 10:47:36
引用: guo8113 发表于 2016-7-23 10:26
正好在学习FreeRTOS

不错 好好学,,争取做个好的项目出来
举报

石亚东

2016-10-11 22:00:41
下载不了,楼主开放一下
举报

更多回帖

发帖
×
20
完善资料,
赚取积分