关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7169|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
; n5 m- |  W5 ]- e# t  V0 z; R- w
( r2 ^7 j; d8 {    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256" p1 e% ]& q! z) e7 q" U$ [

8 Q4 a. M2 q; `, x* z; y其他程序段。。。。。
- n. _* N) x: J# C! U 4 ]* g# O4 }7 q
   free(x_d);
9 m  b+ ^9 o  R$ \0 e! i  B
" S' E3 ]# j! F2 c2 n使用DSP侧单独调试功能,验证动态申请没有问题,5 O- v3 c. @3 A( O

6 p- Q2 o" R3 p% o3 x但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
* Z9 a0 i! ?  [0 k* s. R

" C, ]( v2 K& q8 \
: X  ^! j) I, d  B, j+ g9 e2 a+ f$ I4 F

; }4 W& d( q8 V: E# g+ i2 U2 c# N4 t4 _( ~) K4 w8 @

: E5 u) j& u8 D, g
4 [5 T* Z5 C! t/ m' K: h6 n  }( m* M" q( ~4 e. l9 D
; s/ I3 h$ f2 L
! M3 c; n2 `8 r8 I
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
  a! N8 W# V/ q- x* b: s4 c我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
" Z" X$ q8 M: L7 ?4 b4 l$ e5 j(不过疑惑的是,为何单独DSP仿真就没有问题呢?)! J, p& |' p6 _/ P* e
, r0 E; b  [0 t7 Y6 R
是不是需要在DSP.CFG中进行配置9 V, K- Z  O( ?, a
我现在的配置为
& }, f2 _/ o4 V) x0 O3 V0 ?- G" r  M
. N5 o; l3 d/ g+ \0 t/*
# C0 K4 b8 R( N! o9 K* @ *  ======== Operating System Configuration ========; Z9 _+ B" T$ X
*/% x8 }! m6 ?' G4 ^! ?( ?  {

/ `/ m4 k  m: U5 U% J: {5 f/* no rts heap */
: l, q, s  s+ y* r/ ?6 K% m8 b5 i, sProgram.heap = 0;
  j2 m. t( N1 p* @0 D* z4 oProgram.argSize = 100;  /* minimum size */0 K: H' _5 B' a" ~  E6 p& O
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
/ b6 |1 G6 j/ ?- ~* Q4 ]) d6 I* j9 z/ |' f" e: B% n- o, [& E9 c
/* create a default heap */
5 Z2 c  s7 P. a  r( ]) E+ Dvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 @6 J) \  y! l' b/ [
var heapMemParams = new HeapMem.Params();( q9 D9 H' S/ [6 S
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
6 e* T' B( a% |: q: U* ^( j2 a! t9 ]7 s; p: m# G7 m$ B
var Memory = xdc.useModule('xdc.runtime.Memory');
, G2 v4 I5 l# A: X$ OMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 x. V1 J6 g* \/ u( i' `2 x! i  Q& J) V3 t
/* configure System module */  \0 `# V' [) P5 q) K8 }
var SysMin = xdc.useModule('xdc.runtime.SysMin');+ q9 L3 X# R, _
SysMin.bufSize = 0x1000;) N' T$ B" B' T- z. p& B
SysMin.flushAtExit = false;
( N9 C+ b( g' `1 a
$ G8 v; m' [9 ?! [2 x: vvar System = xdc.useModule('xdc.runtime.System');
6 T# t+ p8 A( B+ j, ]System.SupportProxy = SysMin;
! i+ ]! S6 P# I- V4 X+ G/ ^
, f1 m4 l/ x8 G0 _/* configure SysBios to use the lower half of Timer 1 */
5 g7 o/ p' i# J; tvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
9 h% E5 f9 `1 R6 Y% d( u0 [. tvar Clock = xdc.useModule('ti.sysbios.knl.Clock');6 F  I5 t; ^3 ]  S" w6 a% f
Timer.timerSettings[1].master = true;
- z+ z- B& z& J+ tTimer.defaultHalf = Timer.Half_LOWER;
" b6 v3 ]; r. Y# yClock.timerId = 1;
6 Y  m5 l  B5 e4 a: A) G; P2 E- c$ @; L2 f$ O# ?
1 o5 [6 q6 j; M# a5 q; W" c
/*( v, M: U) ]. m# F: I
*  ======== Miscellaneous Configuration ========
* l) d6 B+ P4 a) T3 D; K */
% u2 ?2 @6 ~" t0 S
: ~/ r& ?  S, J( L: [! v+ h5 j0 T/* set default diags mask */
  }( M: C: _+ m9 ], k" U, f' Tvar Diags = xdc.useModule('xdc.runtime.Diags');
/ |* ]- d2 d0 R% s2 r. Fvar Defaults = xdc.useModule('xdc.runtime.Defaults');$ B: S& z! ]1 e& X8 S/ A7 K: u% I

  k: F. f$ A: ^, NDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
9 ^3 O3 J7 {" S+ Q/ l& w4 ?Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;( W% b  a) I( d/ o, n
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
0 x$ B: {4 l/ X; v% E6 UDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
9 F4 H' d' d( W, F  gDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */+ u5 w! f/ a  o( U+ x) i
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;% L4 V+ Q. I0 `* f  |- Q
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
- t5 _7 c. @* h8 U: v1 S) z' k  w! {Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;* X. K3 @9 g: k, h2 X
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
  g6 K$ d( ?7 l/ P4 @5 ~Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
- }6 h: B* O5 Q1 t' z, X3 RDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;: [! y1 {0 Q0 f" o1 A
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;8 g1 s# o0 W9 J  G: B' m
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
# c, b% v, V5 ZDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
5 a6 f4 ~- V7 x; p3 I* t1 x% e
/* override diags mask for selected modules */
" @. H/ Q1 L9 cxdc.useModule('xdc.runtime.Main');& {+ f( d: U7 p- _# S5 b: F  {
Diags.setMaskMeta(
6 b7 o( L9 x! K    "xdc.runtime.Main",
  @0 L$ \4 u. J: U9 Q    Diags.ENTRY | Diags.EXIT | Diags.INFO,# x  t$ |8 G" F( S- L# H# x- o
    Diags.RUNTIME_ON0 W1 ?% e. @- H" ^( M
);# Q' z+ [9 x( H+ r3 ^, o; R4 k
; l, F# P; P( V& [# K2 L& `
var Registry = xdc.useModule('xdc.runtime.Registry');( A/ f8 [! M5 L7 q/ H
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
6 Y; h' ~, ~2 h1 X5 |  \8 `Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;8 V$ Z$ T# `6 K5 x6 n
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
4 q8 q" ~" Q5 q* \# [& v; R4 hRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;8 I) ]' w5 F, Q6 D/ Q

: y. b8 _3 _) B& X+ n, H5 w: @5 A. q* R/* create a logger instance */; C  ]/ b7 Y' M( d6 I" u0 q% \
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
; \- s, z" P( m, e! a7 d; rvar loggerBufP = new LoggerBuf.Params();2 z0 L( h2 ?9 e0 v" D
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */1 F+ k# Q5 v) h8 d# y" t
loggerBufP.bufType = LoggerBuf.BufType_FIXED;3 u3 H$ _: v9 E8 L& l
1 G. t6 q/ b0 ~7 D
var appLogger = LoggerBuf.create(loggerBufP);
* |, h: A* Z4 M/ }4 NappLogger.instance.name = "AppLog_Core1";& o' q. s( O8 @5 v8 Q% z4 {' k
Defaults.common$.logger = appLogger;3 ?9 {8 A# Q$ i  w6 q6 b2 \
Memory.defaultHeapSize = 0x8192;   
4 B0 u4 Z2 U6 EIdle.idleFxns[0] = "&LEDStatus";
) d+ n+ N5 N+ g/ {/ p, R. _. @  y: NCache.initSize.l2Size = Cache.L2Size_32K;% q: s! J, N) B2 w
6 h1 e( s" K+ h  O$ s) W
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */9 m) K1 g- g" T: t; ]4 ?3 G
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 _, V  z+ x1 L" x5 v8 jvar heapMemParams = new HeapMem.Params();
1 ^" ]1 c9 \& V; x, G4 D0 ~, _heapMemParams.size = 0x4000;- f. a1 _8 _1 L
( o" H: S* E( ^2 j; J
var Memory = xdc.useModule('xdc.runtime.Memory');
/ z& n7 b, q, o: ?4 G, H: ~Memory.defaultHeapInstance = HeapMem.create(heapMemParams);) l$ t1 k$ l: z! G- h

( P8 Y! E( o% }( ~% J8 j8 g3 P' W我大约calloc  每次共计大小为5K*16bits,3 t4 e" B  r$ [% M' Z
而默认配置才0x4000、需要改大。
- C% Y9 S. Q5 h9 E: R- s2 \  r8 P+ R( R# @. o
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */9 u. l  g* z2 m
Program.heap = 0;
2 ?* i9 @2 w+ R' U9 B+ Z" N; C# WProgram.argSize = 100;  /* minimum size */
+ y  ]6 @7 h  x$ j1 x  R/ n, HProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-12-27 12:31 , Processed in 0.041148 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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