搜索
bottom↓
回复: 18

lpc2420 移植 freertos, 遇到问题,程序跑飞

[复制链接]

出0入0汤圆

发表于 2010-3-18 11:34:27 | 显示全部楼层 |阅读模式
各位大佬,

我在进行移植 freertos 到板子上的时候遇到一些问题,希望得到大家的帮助。

板子情况: LPC2420, 晶振12M。
使用的启动代码为 NXP 官方提供。
移植环境:

   Keil MDK 4.0x.

使用的 freertos 6.04, 官方移植:portable/RVDS/ARM7_LPC21xx/ 的文件。

编译运行成功。

freertosconfig.h 使用过 LPC21xx 的模板和 LPC23xx 的模板,都不起作用。

主要设定了系统工作频率 Fcclk.


我的程序代码:

===============================================
void TaskA(void* pvParameters)
{
  while(1) {
    vTaskDelay(1000);
  }
}


void TaskB(void* pvParameters)
{
  while(1) {
    vTaskDelay(500);
  }
}

int main(void)
{
  // ....
  //xTaskCreate(TaskA, "TaskA", configMINIMAL_STACK_SIZE, NULL, configMAX_PRIORITIES, NULL);
  xTaskCreate(TaskB, "TaskB", configMINIMAL_STACK_SIZE, NULL, configMAX_PRIORITIES, NULL);
  
  vTaskStartScheduler();
  
  return 0;
}
================================================

现在的问题:

程序会运行到 startup.s 中的:

PAbt_Handler    B       PAbt_Handler

死掉。



===============================================

portASM.s 中的:

vPortStartFirstTask

        PRESERVE8

        portRESTORE_CONTEXT


portRESTORE_CONTEXT 的实现代码如下:

==================================
    MACRO
    portRESTORE_CONTEXT


    LDR     R0, =pxCurrentTCB       ; Set the LR to the task stack.  The location was...
    LDR     R0, [R0]                ; ... stored in pxCurrentTCB
    LDR     LR, [R0]

    LDR     R0, =ulCriticalNesting  ; The critical nesting depth is the first item on...
    LDMFD   LR!, {R1}               ; ...the stack.  Load it into the ulCriticalNesting var.
    STR     R1, [R0]                ;

    LDMFD   LR!, {R0}               ; Get the SPSR from the stack.
    MSR     SPSR_cxsf, R0           ;

    LDMFD   LR, {R0-R14}^           ; Restore all system mode registers for the task.
    NOP                             ;

    LDR     LR, [LR, #+60]          ; Restore the return address

                                    ; And return - correcting the offset in the LR to obtain ...
    SUBS    PC, LR, #4              ; ...the correct address.

    MEND

======================================


希望大家能够多多帮助, 多谢了!

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

 楼主| 发表于 2010-3-18 13:09:14 | 显示全部楼层
有没有在 nxp LPC24xx 移植此款系统的?
麻烦支援一下。

另外, 还有其他的免费 OS 可推荐吗?
不要给我说 uC/OS,这个是收费的。

出0入0汤圆

发表于 2010-3-18 13:31:09 | 显示全部楼层
本坛有 rt-thread 和 djyos。

出0入0汤圆

 楼主| 发表于 2010-3-18 13:36:33 | 显示全部楼层
暂时不考虑用这些。
成熟性等有待考验。

出0入0汤圆

发表于 2010-3-18 14:08:13 | 显示全部楼层
回复【3楼】ritchie  
暂时不考虑用这些。
成熟性等有待考验。
-----------------------------------------------------------------------

试过才知道的。目前,STM32、LM3S、LPC芯片上都有企业用RT-Thread做产品。在RT-Thread支持的这些平台上,可以打保票,RT-Thread要比freertos稳定。

出0入0汤圆

 楼主| 发表于 2010-3-18 14:49:15 | 显示全部楼层
呵呵, 这个不试, 不考虑。
原因? 不知道, 自己也说不清楚, 呵呵。。。。

出0入0汤圆

发表于 2010-3-18 14:59:15 | 显示全部楼层
freertos不是针对很多芯片都有移植实例么?

出0入0汤圆

 楼主| 发表于 2010-3-18 15:07:04 | 显示全部楼层
嗯, 是有很多移植实例。
我也看过, 但是针对 MDK 环境的 23xx, 24xx 的只有 GCC 环境的。
21xx 系列的按说应该可以用到 24xx 系列的, 我将 一些要注意的地方修改了。
可是还是出现了上面的问题, 请帮忙分析下啊。

出0入0汤圆

 楼主| 发表于 2010-3-18 15:10:21 | 显示全部楼层
另外, 很想也将开发环境完全切为 free 的,
但是一直遇到一个感觉不好的地方就是:
在开源环境下调试感觉有些麻烦。 搞定过一次,
现在不知道如何折腾了。
还是 Keil + JLink or
ADS+ 并口JTAG好用。


请有此方面的经验的大佬也来指导下啊。

出0入0汤圆

发表于 2010-3-18 15:28:08 | 显示全部楼层
想要free的,通常的做法:
GNU GCC (又分windows版本和linux版本,当然还有freebsd版本)
+
Makefile
+
GDB调试(JLink ?)

RT-Thread的做法:
GNU GCC (windows版本)
+
scons
+
Insight(JLink GDB Server)或者是MDK Keil(JLink或其他Keil能够支持的)

出0入0汤圆

 楼主| 发表于 2010-3-18 15:50:31 | 显示全部楼层
多谢了!
也是第一次听到  scons 。
:)

出0入0汤圆

 楼主| 发表于 2010-3-18 16:01:16 | 显示全部楼层
执行到这里后:


(原文件名:2010-03-18_155758.png)


按下 F11, 执行到这里:


(原文件名:2010-03-18_155824.png)

光标下是一个汇编宏, 应该没什么问题, 我看地址好像都正确。
如果此处 再按一下 F11, 那么就会这样:


(原文件名:2010-03-18_155857.png)

真是不可思议!!

出0入0汤圆

发表于 2010-3-18 16:37:44 | 显示全部楼层
 首先假定排除移植函数是正确的(即任务级切换函数,中断级任务切换,堆栈初始化)

  问题1:
    必须在高优先级任务中开放全局中断,不能在osstart()之前开放.

出0入0汤圆

 楼主| 发表于 2010-3-18 16:49:34 | 显示全部楼层
12楼的是不是说的是 ucos ?

出0入0汤圆

 楼主| 发表于 2010-3-18 21:47:45 | 显示全部楼层
依然没解决问题, 自己顶一下.

出0入0汤圆

 楼主| 发表于 2010-3-19 07:34:07 | 显示全部楼层
:( 希望大家能够多关注下,
多谢了!

出0入0汤圆

发表于 2013-11-5 15:17:39 | 显示全部楼层
不知道你遇到的问题现在解决了没有,我在另一款arm7的芯片上移植的freeRTOS,参考的是freeRTOS官网给的例程上的LPC2xxx系列的例程,我也是运行到portASM.S文件中那个宏定义代码中产生错误,不过错误已经被我定义出来了,是包含的文件portmacro.inc中,对应的宏定义语句中的:LDR LR,[LR,#+60],但是我产生的错误不是预读取指令异常,而是数据异常——DataAbort。这个问题纠结我好长时间了,楼主如果解决了,帮忙给个指引。

出0入0汤圆

发表于 2013-11-27 11:14:10 | 显示全部楼层
本帖最后由 LiuYH 于 2013-11-27 11:19 编辑

Mark一下 也在移植 随便上传一个LPC23xx的移植文件
http://www.freertos.org/Interact ... th-keil-rv-compiler
这个网址有部分说明,不过是移植在LPC23xx上的  

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出100入101汤圆

发表于 2013-11-27 11:30:24 | 显示全部楼层
ffxz 发表于 2010-3-18 14:08
回复【3楼】ritchie  
暂时不考虑用这些。
成熟性等有待考验。

“试过才知道的。目前,STM32、LM3S、LPC芯片上都有企业用RT-Thread做产品。在RT-Thread支持的这些平台上,可以打保票,RT-Thread要比freertos稳定。”

你说的稳定是体现在哪里?内核bug多少?还是内存管理、进程间通信机制等设计方法?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-2 23:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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