5854|4

69

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

高手指教RL-ARM如何跑马灯 [复制链接]

第一次用Keil的RTOS,怎么也玩不转,两个跑马灯都没亮,请高手指点:

我用的官方的LM3S8962开发板,MDK环境。8MHz。

我的代码如下:,不知道为什么,用软件simulate都不行, 执行到main的 os_sys_init (task1)后就不行了,进入不了任何task的断点;

编译没有问题,Option选项选择了RTX 内核了。不知道是哪设置的问题?代码是改自官方timer interval例子,别人用的LPC2300,我用8962试试,玩不转!!!求救

#include <LM3Sxxx.H>
#define  LED_BASE GPIO_PORTF_BASE
#define  LED  GPIO_PIN_0 
#include <RTL.h>                      /* RTX kernel functions & defines      */

/* id1, id2 will contain task identifications at run-time */
void task1 (void) ;             // Tsk function prototypes
void task2 (void) ;
void task3 (void) ;
OS_TID tsk1,tsk2,tsk3;           // Define the task ID variables

/*----------------------------------------------------------------------------
 *   Task 1:  RTX Kernel starts this task with os_sys_init (task1)
 *---------------------------------------------------------------------------*/
void LED_Init(void)
{
  /* Obtain own system task identification number */
 SysCtlClockSet(SYSCTL_SYSDIV_1|SYSCTL_USE_OSC|SYSCTL_OSC_MAIN|
     SYSCTL_XTAL_8MHZ);
   SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
 GPIOPadConfigSet(LED_BASE,LED,GPIO_STRENGTH_2MA,GPIO_PIN_TYPE_STD_WPU);
 GPIOPinTypeGPIOOutput(LED_BASE,LED);
 GPIOPinWrite(LED_BASE, LED, 1);
}
 /*----------------------------------------------------------------------------
 *        Main: Initialize and start RTX Kernel
 *---------------------------------------------------------------------------*/

__task void task1 (void)        //Define the function as an RTX task
{
 os_itv_set (25);         //set an interval of 250 Msec
 tsk2  = os_tsk_create(task2,0x10);     //Create the second task and assign its priority
 os_itv_wait ();             //halt the task for 250 Msec
 tsk3  = os_tsk_create(task3,0x10);     //Create the second task and assign its priority
 os_tsk_delete_self();
}

 


__task void task2 (void)           //Define the function as an RTX task
{
 os_itv_set (50);           //Set an interval period of 500 Msec

 while(1)
 {             
 os_itv_wait ();             //Wait for the interval period
 GPIOPinWrite(LED_BASE, LED, 1);
 }
}

__task void task3 (void)
{
 os_itv_set (50);          //Set an interval period of 500 Msec
 while(1)
 {
 os_itv_wait ();            //Wait for the interval period
 GPIOPinWrite(LED_BASE, LED, 0);      //Blink the low nibble LED's
 }
}

int main (void)
{
 LED_Init();
   os_sys_init (task1);
}

最新回复

KEILL的RTOS还没用过,LZ觉得好用?好像说KEILL提供了一个2K左右的内核吧,然后直接写任务程序就好了吧!~  详情 回复 发表于 2011-2-28 13:36
 
点赞 关注

回复
举报

66

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
中断方式的?
中断向量表填了么?
总中断开了么? 你这个代码上跟本看不到……
 
 

回复

2804

帖子

0

TA的资源

五彩晶圆(初级)

板凳
 
KEILL的RTOS还没用过,LZ觉得好用?好像说KEILL提供了一个2K左右的内核吧,然后直接写任务程序就好了吧!~
 
个人签名QQ:1625345502
 
 

回复

69

帖子

0

TA的资源

一粒金砂(高级)

4
 
根据keil的说明,RTOS应该是自动配置中断的,使用的是cortex的sys tick time,在RTX_Config.c中配置,我没有粘贴上,所以应该不是中断的问题。

至于为何用RL-ARM,觉得与MDK配合应该比较好,另外自带flash系统,个人学习罢了。

继续求救啊!
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(高级)

5
 

终于找到是什么地方的问题了,但还是不太明白原因

经过比较官方的LM3s6965例程,发现是startup 代码的问题。

但是还是不是很清楚该如何改写,因为根据getting start的指导,应该是用向导创建项目时添加startup,然后添加内核的文件以及修改option项即可。但是目前发现是

这个startup造成的问题。

 

目前由于没有好的解决办法,只能用6965的官方项目,改为用8962的芯片,但是后面如需要用到硬件中断估计比较麻烦,因为两个startup中的vector大有不同。

或者下载一个新的MDK试试,俺用的是4.03

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表