高手指教RL-ARM如何跑马灯

2019-03-24 16:21发布

第一次用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);
}
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
yytdragon
1楼-- · 2019-03-25 02:46
中断方式的?
中断向量表填了么?
总中断开了么? 你这个代码上跟本看不到……
wanghongyang
2楼-- · 2019-03-25 08:43
< :TI_MSP430_内容页_SA7 --> KEILL的RTOS还没用过,LZ觉得好用?好像说KEILL提供了一个2K左右的内核吧,然后直接写任务程序就好了吧!~
heich_tech
3楼-- · 2019-03-25 10:16
 精彩回答 2  元偷偷看……
heich_tech
4楼-- · 2019-03-25 11:25

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

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

这个startup造成的问题。

 

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

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

一周热门 更多>

相关问题

    相关文章