硬汉嵌入式论坛

 找回密码
 立即注册
查看: 7936|回复: 7
收起左侧

[FreeRTOS] 移植FreeRTOS的问题

[复制链接]

335

主题

2037

回帖

3047

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3047
发表于 2015-3-10 09:11:13 | 显示全部楼层 |阅读模式
系统本来是emwin,无OS。主程序最后就是while(1){GUI_Delay(100);} 。
理论上只要移植好FreeRTOS,创建一个任务运行while(1){GUI_Delay(100);} 即可。


研究移植文档,百度上的说需要更改:

IMPORT xPortPendSVHandler
IMPORT xPortSysTickHandler
IMPORT vPortSVCHandler
和相应的DCD xxxx。
编译通过,任务管理器也运行了。但是液晶的显示固定,没有刷新,程序似乎一直在systick中循环。 似乎systick没有和OS正确配合。不知何故?

另外,对比armfly的例程,armfly没有修改启动文件中的DCD xxx,没有systick的中断函数;但是有个GUI_X_FreeRTOS文件。这个文件在emwin中找不到,不知道是个什么原理?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
发表于 2015-3-10 11:36:59 | 显示全部楼层
1.png
回复

使用道具 举报

335

主题

2037

回帖

3047

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3047
 楼主| 发表于 2015-3-10 13:58:20 | 显示全部楼层

回 eric2013 的帖子

eric2013:
 (2015-03-10 11:36) 
Thanks! 这个就非常清楚了!

那么GUI_X_FreeRTOS是你自己写的吗?

会不会是emwin在GUI_X中使用了systick中断,然后FreeRTOS也要使用,所以有冲突了呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
发表于 2015-3-10 14:59:30 | 显示全部楼层

回 caicaptain2 的帖子

caicaptain2:

Thanks! 这个就非常清楚了!

那么GUI_X_FreeRTOS是你自己写的吗?

.......
按照emwin官方的文件定义:
GUI_X:这个文件是用于裸机emwin的。
GUI_X_FreeRTOS是用于FreeRTOS的,还有其它系统的
4.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
发表于 2015-3-10 15:00:05 | 显示全部楼层
这个GUI_X_FreeRTOS是以前ST官方提供的,也可以自己写,很好写的。
回复

使用道具 举报

335

主题

2037

回帖

3047

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3047
 楼主| 发表于 2015-3-10 17:47:20 | 显示全部楼层

回 eric2013 的帖子

eric2013:这个GUI_X_FreeRTOS是以前ST官方提供的,也可以自己写,很好写的。 (2015-03-10 15:00)
多谢! 这下子清楚了!  我用的emwin5.26,来自MDK,所有没有对应的FreeRTOS的GUI_X文件。

看来FreeRTOS在MDK那里不受欢迎啊,官方的emwin居然不带一个配置文件。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
发表于 2015-3-10 18:04:20 | 显示全部楼层

回 caicaptain2 的帖子

caicaptain2:多谢! 这下子清楚了!  我用的emwin5.26,来自MDK,所有没有对应的FreeRTOS的GUI_X文件。

看来FreeRTOS在MDK那里不受欢迎啊,官方的emwin居然不带一个配置文件。

....... (2015-03-10 17:47) 
估计是FreeRTOS跟MDK没有合作关系吧。ST基本用到RTOS的时候都是FreeRTOS
回复

使用道具 举报

335

主题

2037

回帖

3047

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3047
 楼主| 发表于 2015-3-10 21:56:44 | 显示全部楼层
在Eric的帮助下,马上就改好了!给后来的工程师们写几个tips。除了一般的FreeRTOS移植中需要拷贝的.c和.h文件外,

1. 在FreeRTOS的demo文件夹中拷贝对应的FreeRTOSConfig.h文件后,需要加入一行:
#define configUSE_MUTEXES           1

2. 在FreeRTOSConfig.h文件中定义如下几行,这样子就不用改标准的启动文件了!(不用百度的方法)
#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler
#define xPortSysTickHandler SysTick_Handler

3. stm32fxxx_it.c 中需要删除默认的3个中断空函数,就是上面define的3个空函数。因为FreeRTOS的port.c中定义了它需要的这3个中断函数。

4. 如果使用emwin的话,需要把GUIConf.h中的#define GUI_OS               (1)
5. 而且GUI_X文件必须换成带OS支持的文件。 如例程中的GUI_X_FreeRTOS。这个文件中主要改了emwin的tick的获取方式,延时方式等。emwin的时钟基准全部来自FreeRTOS的函数。比如这里是:
int GUI_X_GetTime(void)
{
  return ((int) xTaskGetTickCount()); //用的FreeRTOS的函数
}
而以前单emwin的时候,只是返回一个tick的全局变量即可。

总的说来,FreeRTOS是基石,它定义了systick的中断,管理了systick的配置,而且选择相应的port.c和portmarco.h文件后,这些配置只用3个中断向量重定义即可。emwin的时钟只能使用FreeRTOS提供的相关时钟函数。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-15 07:51 , Processed in 0.437014 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表