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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构/ f( I* k9 W* ~# |+ \5 s

3 \/ C/ Z: C& f3 u7 d0 P    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2564 }* Z3 a% q: C: @; p7 R2 n

$ c0 H) z  i  T8 L6 a/ c其他程序段。。。。。. J7 k+ h" n% ?; Q/ T; U, D: e

, w# |9 o" Q/ ^# p0 [4 D4 R   free(x_d);
! E2 j$ V* A- n8 G3 h! }1 B# Z4 s
' @. e1 Q8 I* P2 _9 R使用DSP侧单独调试功能,验证动态申请没有问题,
: ?2 T: A4 q) L8 {/ o: k# k4 u, r+ q! i$ c4 ], U" P
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
: `: s7 ^& G) L% U+ d/ K

( l* l' f2 D3 ^- j8 H- b4 u" o6 {* F
" L/ w! J0 K$ }3 }4 C4 M
5 J: t, N$ {+ q; K. A2 }, |+ |7 B0 N# i# A$ F0 C4 Z
2 B% _: a' d( M1 T# A
; M( {6 x; o- x( S4 Q
0 e3 `' K" t& }2 {; w- h

( ?/ S; N; Z0 X- p. S: D
% i) ?: u+ m, c: D, w3 L
$ Z/ w* r$ J. u. [! W% v
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
) J# s/ R. N5 s! U2 E9 h% W2 x  cProgram.heap = 0;/ Q' {7 |( z. l, p4 }% @0 F
Program.argSize = 100;  /* minimum size */
( ]4 }/ G6 ^, E7 N/ A, GProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
! Z% i5 }+ ?1 p# uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
: c5 v- G; [  @! D3 U' cvar heapMemParams = new HeapMem.Params();1 b- Z7 ]) J! E" t- R2 D! k; S
heapMemParams.size = 0x4000;
/ V! U- h4 Z4 n2 p6 ]/ {5 D6 t  \+ U' I6 y
var Memory = xdc.useModule('xdc.runtime.Memory');
* K/ Z7 w: V7 m) G( c3 v. HMemory.defaultHeapInstance = HeapMem.create(heapMemParams);7 H' c2 I& m+ ]* d1 s2 c

# \/ L; o1 ~9 v( |% y/ }( A, |我大约calloc  每次共计大小为5K*16bits,2 o# \5 V5 }$ l5 P1 Q( ^5 O" T9 ]; \
而默认配置才0x4000、需要改大。  ^* S) C2 q" L$ _. X. s6 X
& A; a, H9 y! v# M7 a$ a( j8 E
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
+ A) k- T& V# ^/ M; B% f" Z我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
: Y2 x: P4 j. _2 J5 V(不过疑惑的是,为何单独DSP仿真就没有问题呢?)+ S4 D$ V3 Y1 c. v3 K7 `
6 n- H1 V3 D; S* n7 X5 C8 \
是不是需要在DSP.CFG中进行配置  P/ m5 V1 b2 y+ P. `- w
我现在的配置为, T: a  M, O: o# G: j

+ ^; ]7 n" O+ \$ ^/*
' R$ d5 O# {8 A8 Y- ~ *  ======== Operating System Configuration ========
) d8 ~0 Q9 }( G/ O */
5 J7 L. i7 y& x) T5 o) e" n5 H3 O9 r; U/ q) F
/* no rts heap */% ~% x. Q; y+ O2 J7 a7 X" v' x8 G
Program.heap = 0;
8 L9 j8 |* i; S% C! aProgram.argSize = 100;  /* minimum size */% s9 ]. O7 a1 g8 B
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大. R& U, J4 F, v
8 L$ j4 D% Q/ e* V8 q
/* create a default heap */
6 a1 ]% \2 l4 c, _( ~2 yvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% a; R0 T" C4 c# E: Y
var heapMemParams = new HeapMem.Params();
6 r8 r; I+ v9 g% s. Q* n8 eheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大: q( o0 w; x, K$ [

2 e0 I3 {; j* j
var Memory = xdc.useModule('xdc.runtime.Memory');% X' O! c! N0 c; c3 c: j" @: O
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ e8 ^% f/ _5 w
# O# R/ ^: h3 B& |# t' L- U/* configure System module */
" O7 W! p8 `& T  ?9 ?  z3 Yvar SysMin = xdc.useModule('xdc.runtime.SysMin');) R: j" ^. |, }8 d) x
SysMin.bufSize = 0x1000;
' E2 r2 m$ H6 J5 e3 W9 f9 h( [: QSysMin.flushAtExit = false;/ N' s+ X+ p2 X

1 c0 ]$ ?1 k% Y' W" w7 X" `% Ovar System = xdc.useModule('xdc.runtime.System');
& {3 M6 {$ T4 ISystem.SupportProxy = SysMin;
8 [$ p: Y6 _; R# i" r* \9 d  a* u2 _: `* }0 h
/* configure SysBios to use the lower half of Timer 1 */
5 d5 }# ~: ?/ Z' K1 t( Tvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
1 E1 E/ I+ o9 P  ~! ]2 yvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
% m0 A0 S9 n2 a- X' y" |) aTimer.timerSettings[1].master = true;
. a1 n& L1 c8 u$ H% O4 @; `Timer.defaultHalf = Timer.Half_LOWER;
2 _& f2 ~6 l4 h! e, M9 S0 d# Y- ~Clock.timerId = 1;% x; b/ @, k2 D
' o3 |0 v7 P4 \

  y' Q& K3 N& X/ a, A/*7 L* `0 D) k  t3 @+ c5 d0 G
*  ======== Miscellaneous Configuration ========2 r0 R& X% r/ Q
*/1 q6 {+ X( N$ ?  x" j+ A2 I7 H
1 ]1 U  B! o1 J$ @
/* set default diags mask */- U+ ?% b! O( z) ~9 m
var Diags = xdc.useModule('xdc.runtime.Diags');
3 Q- K$ @4 ~8 n6 Y& Q* u3 p5 fvar Defaults = xdc.useModule('xdc.runtime.Defaults');
6 ^0 L  _! i" Q
- C6 E8 [$ r" `1 @: `Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;0 q/ Y8 k6 a% t  t" \/ `  p
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;7 L5 p$ L+ S2 ^/ I
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;# `* s2 y2 s, b4 B. A
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
% I% C1 ?; }$ ^: C) d  [' F+ B/ y7 yDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */9 P! O# L" U3 S! o* s) H1 W
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;% t1 ^5 M" c6 {' Z4 \
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;, I  c# I7 c* t0 O6 ~$ ^9 r
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;+ w2 o2 }" a7 U7 v3 h& Q9 j& v
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
2 j4 M7 y2 s, S' z+ M$ F+ aDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;7 M1 S- o: w8 D9 H  `  j' @5 o
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;5 l0 X+ R0 O9 z8 r: q- M$ G
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;& H, }3 A1 @, ^6 \
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;& R- k8 o% O" L/ |5 |
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
0 R* x  H3 p- U# z- F
3 I) i7 D9 r" p3 z' l$ i/* override diags mask for selected modules */
/ I3 i  e& ~2 pxdc.useModule('xdc.runtime.Main');" o% j$ G8 u( r. |
Diags.setMaskMeta(
9 T% `1 e9 L/ ]  W, W    "xdc.runtime.Main",
  ^3 P1 c; z+ n! w    Diags.ENTRY | Diags.EXIT | Diags.INFO,
3 r/ G5 D! G* {' F    Diags.RUNTIME_ON" x4 H: ]1 J! N, r* k) f% ?
);8 @7 I- i6 @. a1 l: O
; b% Y- P7 E" G5 _
var Registry = xdc.useModule('xdc.runtime.Registry');
: O) D, t7 A, _$ f! y3 Z1 NRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;5 o8 K, U6 M6 Q* t6 D
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
) D, n* O5 W1 m" e* q$ c! }Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
7 L1 S+ n' x: a; c8 q- ]Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;- _# P+ X8 ?2 J+ s! l! @
* J; S- e+ u% a6 R' v4 M- V
/* create a logger instance */
9 j8 ]8 P8 k* {9 K( d3 L% F! tvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');# Z: R; I. Q; M0 ?) j: U
var loggerBufP = new LoggerBuf.Params();0 y  f- k0 x% k# y
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
( X( u9 a5 w7 ]- \4 x2 DloggerBufP.bufType = LoggerBuf.BufType_FIXED;
% r/ h  j; k8 _/ @
. v- K' ~( o, I) n9 j$ H" ovar appLogger = LoggerBuf.create(loggerBufP);8 j3 d1 `7 n7 F; w4 b
appLogger.instance.name = "AppLog_Core1";
( K' I5 M% U6 @/ ~, E; Q0 nDefaults.common$.logger = appLogger;+ f3 v0 O3 C6 K$ ^6 \" J) O( _! j8 [- _
Memory.defaultHeapSize = 0x8192;    5 ?8 Z4 |$ _6 f& M1 a& l+ ^
Idle.idleFxns[0] = "&LEDStatus";9 q& h$ D' `, X" t
Cache.initSize.l2Size = Cache.L2Size_32K;- K0 r5 D2 Z7 h! V3 J7 c9 a6 v
' I! f/ m- v: j: W9 D! V
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-17 09:33 , Processed in 0.048365 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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