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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

" T% i' E6 E2 z( H9 v" d    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2564 ^" B8 m; j2 I2 b
  x& Z8 R9 D$ e) Z. P; P
其他程序段。。。。。( Q- N3 q% M% D3 t! s* G

1 n# @3 k3 i( H5 @: u   free(x_d);6 q5 d$ ~) i) x5 F, D

0 b$ e" e1 P3 K) I4 W+ e; i使用DSP侧单独调试功能,验证动态申请没有问题,; p  U2 a% u. r5 A7 C7 g! e, h" y
, v2 |4 z% X# f+ k5 S
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。& @( [3 _' o/ Q* f8 b

! x, |  j5 e# S2 D2 g  e( i9 |5 w  \% A5 G1 H# w

' T( B$ q1 d# V7 b+ S  A2 A1 D" j# V: w6 d3 ?1 b5 }9 Y

3 P2 m( c; b& i9 |: n; a" N
8 ?" E6 I9 l7 W$ ?9 h8 U& d; v* x* J
! u% I4 b: t& d- M4 v+ O+ s9 Z) q
' L: M& \3 R6 a9 g* ^4 P( b" P2 ]' w* \" H/ T' k% Q& V+ \

/ b0 ^  q6 i& D3 z
分享到:  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 */
) E8 ^' V3 j1 b: ], DProgram.heap = 0;
# G+ z. b+ k& pProgram.argSize = 100;  /* minimum size */9 R% c/ I, X8 _, r% s
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */: ^. x+ T* F. Z) T
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ R7 Z& u5 v0 a& b/ A# r8 Svar heapMemParams = new HeapMem.Params();
8 q  C% A- q  _/ G% s3 cheapMemParams.size = 0x4000;
( ]7 H' p+ d9 l  {
7 }3 E$ w3 v& _( D8 d# ~var Memory = xdc.useModule('xdc.runtime.Memory');
3 b2 Z% j. ^# T, G" i$ rMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
# U" B/ }  i4 c9 V! y- @
# B) N  J% K( h( d我大约calloc  每次共计大小为5K*16bits,
' m& {# f" `$ c8 b6 e9 b而默认配置才0x4000、需要改大。1 o4 d9 H" ]2 V3 K& f, X( Q; T( Z
+ M$ P5 w! g4 _/ j  @
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
( L! p9 F$ ]1 w: ~: G& K. l% R我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
+ Y. j* Y8 d3 v) L9 ^(不过疑惑的是,为何单独DSP仿真就没有问题呢?)  T3 d9 ~5 c7 [6 V$ I9 j: s

: s# A; h$ R, P+ s  O% F( t是不是需要在DSP.CFG中进行配置$ ]9 b) f% B9 Y
我现在的配置为, ~( s3 ^+ w$ x: E/ d- Y1 G

" J, v$ `- @% y, P, z% U) W/*
- B2 c  ]7 R( @6 o$ Z0 { *  ======== Operating System Configuration ========
0 Y$ A/ E, e6 g/ k. R. b */. I0 m' S, e; F

/ m. i6 f! U+ r" d1 ^  \) N/* no rts heap */- U" p  n/ ~1 X3 ~7 i: H
Program.heap = 0;
8 O$ u, ~$ g0 x# c# R9 F- W" sProgram.argSize = 100;  /* minimum size */, K' @7 V4 i; B* r! L: `1 H6 k1 w; [
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
8 V7 X9 d! z8 q, ?8 b) R
6 ~1 w" H+ N: i& X/* create a default heap */2 R# r8 V% Y; z2 x) N% v
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: A* H  ~7 T6 t: M
var heapMemParams = new HeapMem.Params();% t: @9 z9 Q- k$ `& B
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大% \: k! e5 f( c& I
% C& [8 s. H/ f" |$ _
var Memory = xdc.useModule('xdc.runtime.Memory');( ?3 m5 L5 w% M' y% R# B
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);8 o  p" X9 l- ]( l9 v' p7 Z

- y5 _: n/ `5 h' c: F& L$ r/* configure System module */
0 \( {  F7 G" K* f9 q0 ]) pvar SysMin = xdc.useModule('xdc.runtime.SysMin');- q( P' j' }9 y8 p1 c9 Q
SysMin.bufSize = 0x1000;
' Q; ^8 c- C# U( |( B6 ^" ]0 HSysMin.flushAtExit = false;
; g" V0 Y& _) {. D/ W" `
2 \& `' ^# P4 v$ J. x; w5 a+ v& dvar System = xdc.useModule('xdc.runtime.System');
; x0 K) d0 H& b/ i6 CSystem.SupportProxy = SysMin;
7 D) n7 O7 D% b" x: w( d+ a$ V
4 F- j: B# D& ~" Z/* configure SysBios to use the lower half of Timer 1 */# @' W8 ~+ X  c7 ?8 W
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
9 }  z4 X5 v) L( f$ ~" u- j+ vvar Clock = xdc.useModule('ti.sysbios.knl.Clock');  e. Y$ Q8 I) ~6 L
Timer.timerSettings[1].master = true;4 `3 X4 N9 _6 \6 S3 S+ }4 ]! \, J
Timer.defaultHalf = Timer.Half_LOWER;" S9 h5 e" g6 W! P% ^
Clock.timerId = 1;
5 r  m+ q) G7 z! Q
! e8 U7 W6 c# {; s1 M7 d; n! x& D% t: a$ e
/*& x1 I- {( q; E6 _
*  ======== Miscellaneous Configuration ========
# w! H- [3 r/ Z+ q+ v0 P' E: j */
# T# \* m* S  E9 H/ q) x
) R: }/ c1 b$ S* B% P2 c/* set default diags mask */
" L. N9 i0 a/ D  o9 svar Diags = xdc.useModule('xdc.runtime.Diags');) o0 u) X, V5 _8 [% r
var Defaults = xdc.useModule('xdc.runtime.Defaults');4 h: y' z" L" b  F
& t" b4 W& x# E' O: D7 u
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;% u2 l( A7 l6 X; y5 o
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
& K6 J* b" r; rDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;2 m+ m% [* v& C- F. B: T
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */9 _8 }+ ~$ ^: K7 F* a+ c( l
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */* m' U( @/ x# \) z: J( O: f
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;- e* E. v% G5 m+ C: H! x
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
* v3 k4 w: ^9 @! @# n4 M" XDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;1 q! F& }( d. y
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
. z2 r5 T: p8 P7 z  K, HDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;8 n6 J* [, X4 ]- X  B5 ]- u# ~
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;% Q/ y4 p4 u- V7 l3 R7 q
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;: j* y2 W1 b( |
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
3 M& n5 I* `7 n" m8 `  |# }4 QDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;9 o% b) N6 g+ r6 Q

7 v4 k0 q+ n: h* |/* override diags mask for selected modules */
# R4 C# Q, w9 @xdc.useModule('xdc.runtime.Main');
6 u  i; j2 A+ g  E2 y# SDiags.setMaskMeta(
3 W2 B# L# Y1 ]1 i9 X% b    "xdc.runtime.Main",6 A4 ~8 I+ {( I' i
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
4 x' ?) w4 a+ o+ f    Diags.RUNTIME_ON0 }& {8 o0 A- `' Q  T3 `
);2 f$ m( ^! A. d$ P2 G
/ q; g8 ^" O1 K* `6 {5 d; v
var Registry = xdc.useModule('xdc.runtime.Registry');, A& e1 Q% M7 O* i8 E/ v
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
# z8 }6 n; e# t5 _& v  LRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
% t, k+ D$ V3 z  h$ q! `Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
5 K8 X# f, W1 d" jRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
5 `# |1 ~7 n* `& z/ s3 \5 p7 ^9 z5 T# ~. C9 b
/* create a logger instance */
* D9 f2 i3 ^' H: ivar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');; |4 ~" G  [( s0 z- w
var loggerBufP = new LoggerBuf.Params();# M8 N) I* c7 F0 H
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory *// l  \7 d+ n0 t+ W- ]
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
7 S& K. x) G, n( O) Y
5 Y# ]+ `! i4 ^: F  i& N+ f" }var appLogger = LoggerBuf.create(loggerBufP);
" `; k/ M" b& @) q. BappLogger.instance.name = "AppLog_Core1";9 a2 f( C: j, E/ x2 m6 O
Defaults.common$.logger = appLogger;3 A$ P- _) `0 k' z! z* c0 G
Memory.defaultHeapSize = 0x8192;   
  [8 x- y9 K2 c- w; Y4 S  \Idle.idleFxns[0] = "&LEDStatus";
# }# l' z- y) B0 @$ ECache.initSize.l2Size = Cache.L2Size_32K;
# n4 v8 ]  \+ T7 @, W4 M( r1 e, ~$ F9 X' M- y
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-7 06:47 , Processed in 0.044358 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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