关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
6 I/ p  M. q( t! ^9 ^! V
$ [/ _9 ^- G- {! g    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256- x& f* W: s. ]' `( v: m  u

/ V0 M' q  a0 w+ |其他程序段。。。。。
+ _0 m7 P  F* Z2 i' z( I7 `
, w( l# ?& o2 S1 N* p! \   free(x_d);
$ Z7 y1 J- Q( Y5 [- {
/ V( }/ E4 g, }0 `5 ^3 V, b使用DSP侧单独调试功能,验证动态申请没有问题,
' u& V& B( `, R3 e- o6 p) D" V/ O: ~: G* m/ }% V: K( x: i
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。2 P7 l/ T$ V& h6 [
! N% Y! r1 `* Y- y+ K
: H5 \. w5 j% w4 d6 ^" ]* V/ L

$ c# @. ^. I& @  a# ~$ Q6 @, k2 w
. Z4 P; b2 k# J) a7 p8 Y

, ]7 A$ `" P: A3 {3 L% c5 y9 `' H9 C' i7 w. q: K

3 T" Y! W  ~1 \& o: ~" g" ]
( W% R- m: O9 N: U2 n# b! H1 h, q. d2 i
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明/ J- V4 }' B- M' H
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下7 a& d" P6 {; O: j7 V& s* q
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)$ R% ?- D/ e1 q+ [$ B

' r# @! K! J# f是不是需要在DSP.CFG中进行配置
2 n5 ^# F; i9 @) P$ E( c  b我现在的配置为
3 u: a1 V7 v& J- C- o8 z  T
6 w6 ]/ B  e9 Q& @8 C3 R! f/*
5 }6 }# I$ G9 h1 q *  ======== Operating System Configuration ========8 z- z  c! s4 A* I0 \, ~8 B
*/8 r% ~! h0 H: h! |
4 [' y, q) @4 E" u4 F3 [
/* no rts heap */
5 v- @  F: X3 V9 {5 F' v- @! aProgram.heap = 0;8 K5 w3 M& ~- e0 H# ^6 r& p& S
Program.argSize = 100;  /* minimum size */7 z& b! `5 e' N7 x5 a6 t2 g& o' D
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大* `( N2 d5 }0 ^3 g
& S' h; a: W: n" F" l3 _
/* create a default heap */4 [* |0 h5 w5 _6 Z2 J8 V
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
, O, B3 P; \0 Rvar heapMemParams = new HeapMem.Params();
; C6 A, T! W, |6 X  Y+ OheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
- m5 ?, g" D; [+ d7 }, [4 P
$ ^, f. B# K" x9 I/ z3 h9 |
var Memory = xdc.useModule('xdc.runtime.Memory');. {$ C( d3 z$ j  C! m0 @
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);4 g* T% x5 j  z7 \  b! R  b8 B

% @2 G- D0 }& u3 G& A  q8 W/* configure System module */. B" T6 X4 {( Q! C
var SysMin = xdc.useModule('xdc.runtime.SysMin');
7 U9 s2 @. D7 D( R, {. P+ v8 rSysMin.bufSize = 0x1000;; K! M5 G0 i4 J+ @
SysMin.flushAtExit = false;
0 G& k! B$ F/ o9 C8 v4 l6 o
! E% p, f% a) o+ L- i- ?. V7 dvar System = xdc.useModule('xdc.runtime.System');
) A" A/ D9 j* |8 t8 hSystem.SupportProxy = SysMin;
1 c$ B; j1 E6 x5 i5 I+ N) f
; F) L1 E# a! v  ]6 p8 S' D/* configure SysBios to use the lower half of Timer 1 */0 o* I/ w) m$ L: k
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
  a7 S1 U: h' R; k. b+ s4 dvar Clock = xdc.useModule('ti.sysbios.knl.Clock');  X, L' N% }* R  t' P2 j" j
Timer.timerSettings[1].master = true;/ F/ x& W2 T2 i, `) o# \
Timer.defaultHalf = Timer.Half_LOWER;: a( g# @# ^& O' Q$ s
Clock.timerId = 1;
( p/ ^) @! u/ w6 n
9 e0 A5 W- \) n, ~. O; S' N( T/ K" r+ N+ k
/*) x' M+ {8 u7 `
*  ======== Miscellaneous Configuration ========: E1 q& _3 b8 I* w6 R
*/
" f* X- `) e) B( l' H( w! f
6 m. R. B/ ~, z. e4 S5 U+ A' p/* set default diags mask */# z  @1 N# X0 _; A1 N7 g
var Diags = xdc.useModule('xdc.runtime.Diags');+ w& N% @3 g( A, _1 `
var Defaults = xdc.useModule('xdc.runtime.Defaults');& O8 `0 n+ {9 U8 K1 s" q4 H
2 j; E0 ~( R- O2 D
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
6 R, ~, R) l6 V- Y) r. `! t2 yDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;: I5 k, }8 D9 v8 P' ?
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
; Q3 I9 T" H' |" T/ sDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
$ m# W( S0 a2 S4 Y% w+ t  hDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */) H- U5 b( q; M
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;- h8 J: f+ x; c1 ^1 F) L
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;) e6 Y9 ~# b0 a# S! l6 Y: t- h
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;. L7 |5 z: Z6 k; y
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
: T) Y8 A2 s/ B: V8 t9 \Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
) H; Z) e% k) L: Q  R3 qDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
9 G! A' ^, b4 Y- C# e: oDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;" j! Q7 B% u: b3 B* @9 o
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;5 M. ?7 G9 q! w8 W+ t
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;: t; i, P# |' |$ g' }

1 d$ b; Y- b9 }% `7 k$ G& F  O/ W- F# e5 u/* override diags mask for selected modules */$ b% m& \6 i8 K, }
xdc.useModule('xdc.runtime.Main');: d! e0 x+ K! q3 B& r
Diags.setMaskMeta(
: Q! B4 _/ `& ]( C' t4 i4 k    "xdc.runtime.Main",
3 `- m6 x5 C& q6 `6 ]    Diags.ENTRY | Diags.EXIT | Diags.INFO,6 I! H' P  g3 G! P0 D% d6 y" U
    Diags.RUNTIME_ON3 {8 Z, r, U& h% ^  M+ y& _
);7 q( u1 X6 b9 H; v# r' S0 ^; L: e3 l: m
$ }  {& w( s9 {$ a) s
var Registry = xdc.useModule('xdc.runtime.Registry');
2 v* Y2 Y" z% r$ {9 I& o* {/ c1 DRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;* ?" Y# p% v# ?$ o$ R. m
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
' g/ H( y& U; P/ p" E  V& Z$ {0 ~) \Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
5 f0 O+ w% j: |# p7 x- mRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;% ~8 `. g* a3 O1 K8 S! f, V+ E
+ {. A1 ]+ i5 \$ h. T; r
/* create a logger instance */
3 \* U& }, |; [# ~+ {+ A( [) t% ]var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
8 @( {* N% |% b' n, r5 [  pvar loggerBufP = new LoggerBuf.Params();2 ]! T: `- Z+ N% E+ D* ^! [4 S
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
, ^, |" b6 h+ NloggerBufP.bufType = LoggerBuf.BufType_FIXED;
6 A/ B" O1 C6 h/ |6 r4 V
+ Y; b) D) x2 D/ w' Rvar appLogger = LoggerBuf.create(loggerBufP);
$ {# x- o/ H6 j; c; FappLogger.instance.name = "AppLog_Core1";
  G5 g. o0 q1 Q: {Defaults.common$.logger = appLogger;3 f' q4 b4 T6 `
Memory.defaultHeapSize = 0x8192;    0 @( L0 I9 T0 x2 i( z7 }: f
Idle.idleFxns[0] = "&LEDStatus";
" }! x* r0 {4 WCache.initSize.l2Size = Cache.L2Size_32K;5 l% I3 i3 ^1 B( g

, G, j4 F& O4 l- k: ]5 w* y
回复 支持 反对

使用道具 举报

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 */
# f  e4 Q- j1 m- |, Tvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
; S: _( U, s% G( g, c8 D! Mvar heapMemParams = new HeapMem.Params();/ Q7 ]  [7 E# h" h) M
heapMemParams.size = 0x4000;. U5 s  c8 D9 p! ]" e
  o% ]1 G! n& [+ M% J9 L- T; b
var Memory = xdc.useModule('xdc.runtime.Memory');
/ ]; p0 G2 S2 SMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
& F% v6 A: d) ]. |8 [6 J; y1 y# k+ E4 r, P
我大约calloc  每次共计大小为5K*16bits,
6 V" R. w+ V; c$ f* }( m! l  H. y而默认配置才0x4000、需要改大。
: m. [" i5 Q+ D; U
( m! |1 n  t8 w9 A2 q$ \9 @
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
# P- E& M/ j# Z! j# N! BProgram.heap = 0;
1 W1 P$ l# S; m- dProgram.argSize = 100;  /* minimum size */
2 |3 y6 H' d; m1 r* f9 P6 I; \: `% tProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-3-2 05:24 , Processed in 0.048195 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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