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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构$ ?( C8 [4 j5 G/ h  s" \3 U
6 C5 R! J4 N1 t$ o2 ]- p# F0 j& ^3 w
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
6 ^. z0 J: r/ T2 T8 y- y0 V) m
3 C; D8 {/ P# b' k. @% P其他程序段。。。。。
4 Y8 `4 K/ ?  ]3 t1 _8 M3 k3 W  A- q
- P; c: H- S+ k$ w6 O* h   free(x_d);
1 M  B1 o0 r% c/ e9 [, T5 S- Z" V* ~- y1 R, F) v2 p
使用DSP侧单独调试功能,验证动态申请没有问题,. B+ O7 Z% q" `

( U8 l) ~4 T/ y# i! o但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
5 y  A* a7 z' f, h7 b
0 N& K# S" r& H, V
6 h. U3 v# B) t8 T$ p

, K" C9 l! |4 W( _1 Q; d: m9 K1 L  d; b
: K! M) S" w8 R  O5 x

/ g& ~" `: n: Q
4 V8 R0 E% a. ~- o
( j$ k$ P& c4 x2 P! q$ @
4 y' B; V9 z3 F/ m! J
5 n, J0 ?0 F8 b" m
分享到:  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 */
7 N3 F- L& `6 ~. q- I. s) P% uProgram.heap = 0;
* L/ |: r1 f/ `& O3 sProgram.argSize = 100;  /* minimum size */1 E; O/ K8 y5 u6 ?9 H
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */8 ~( v& P. Z8 m1 J* o
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: ]8 |, B* P9 A6 H& p7 ]
var heapMemParams = new HeapMem.Params();
  G  |$ w  ^+ V' D) U. CheapMemParams.size = 0x4000;
4 `! F9 S& }0 @" P; Y
- N  A' z1 G. ~: C* l4 C% zvar Memory = xdc.useModule('xdc.runtime.Memory');& h# r. {3 G2 e# }( e. l) C3 v
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
. s; i) B, ]" I8 b, |6 `& O0 @8 T+ A
我大约calloc  每次共计大小为5K*16bits,# O' E+ m: s- J4 S, D
而默认配置才0x4000、需要改大。* Y' Z8 N, B( n+ Y& a0 w. R
  ]# J, y1 D2 B+ S  d* |! p6 t' d
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明* Z* h. c( i% ?9 ~* H  t
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
+ T4 T5 K9 w* l4 c6 |# w, f2 C1 g  c& m! g. z(不过疑惑的是,为何单独DSP仿真就没有问题呢?)& e8 ], G* E8 o  l! U( r. I

: @, F& c4 |8 g5 Q/ k( B: h/ t是不是需要在DSP.CFG中进行配置- ]6 @$ A4 i' q$ W+ N/ \0 V
我现在的配置为9 D* p. `  S5 u" Z' `3 S9 n% Y! n

% p4 [( \$ j& [5 O/*
+ P) a! _! T+ j, ~* y2 q *  ======== Operating System Configuration ========
7 P: [7 n4 H$ l* O* R1 Y) ~% X */
) e$ H( C8 n% F9 b9 }, @1 ?% K' g
7 q0 n3 L2 P# r3 \2 N+ |  J7 i2 q/* no rts heap */+ T' y8 J. V6 s3 R3 Z' u
Program.heap = 0;; d6 m( ^4 F* S5 p, T! ?" \; {
Program.argSize = 100;  /* minimum size */
. y. A8 E  O* ?/ \Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
6 P: }; i9 S( I5 L9 t: r% M) |
2 q, e5 J/ J$ l* k) B/* create a default heap */
: E: ^4 [. S# {8 x: u- rvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 W" B  u% E: ^var heapMemParams = new HeapMem.Params();: a; P" J0 o6 V3 s# P
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大. Z" _# J; S# J+ q' s1 b, }2 @
8 N0 K. W$ N5 A8 t
var Memory = xdc.useModule('xdc.runtime.Memory');% ~/ ?& N1 L; q8 W
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
! F9 {2 B$ m" |: c
4 Q$ ~+ I& I! S/ ?7 x$ w/* configure System module */% T7 {. s7 [$ [* o# e
var SysMin = xdc.useModule('xdc.runtime.SysMin');: F5 |: g5 N8 s9 W
SysMin.bufSize = 0x1000;
7 F5 \: D' R, fSysMin.flushAtExit = false;
) h; e& {9 Q8 x! l
' {( t! y' {* ]var System = xdc.useModule('xdc.runtime.System');
" ]5 J1 I  v% T& ~3 \% u  pSystem.SupportProxy = SysMin;5 R, S* u& l: _" J6 \- o

) S1 d' \, x7 ]& Q7 n5 V8 M0 g. v/* configure SysBios to use the lower half of Timer 1 */
# z. p, @( z7 s( U# z, ~) lvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');& u- }8 |9 a: p4 j+ T$ B
var Clock = xdc.useModule('ti.sysbios.knl.Clock');0 [( ?7 y  x6 f7 M; K9 X" O8 x
Timer.timerSettings[1].master = true;
4 `1 E+ O( M% ?( [1 S: pTimer.defaultHalf = Timer.Half_LOWER;
5 K0 R0 a3 ?2 o6 Y1 nClock.timerId = 1;% O9 y/ ^! H  \: P' e7 y0 \" y

7 V! O4 `- ?, u/ e# {+ v* O
0 q8 ?: {5 A, A. B% @/*
! G  Z7 n5 T1 G; k& k6 u1 y *  ======== Miscellaneous Configuration ========
  e& U# B2 {+ Q( k */
& ]) l% n$ C8 D, E( f; l- C% w% F; \2 Y( ~/ W: K
/* set default diags mask */
% E* ~1 X5 Y% }/ @, qvar Diags = xdc.useModule('xdc.runtime.Diags');. c* z4 P. g2 y6 o- Q. b1 Y- }
var Defaults = xdc.useModule('xdc.runtime.Defaults');
$ l2 P6 W+ M+ c
, E; U' G% @" L; L+ oDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
* W+ s# r4 Q. ?1 i: i8 ~Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
) N/ i) s# s" LDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
' V3 T; ~  l2 M: T" I5 y" X1 zDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
( y( r6 i/ W3 v+ o( R+ p' F; g; UDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */1 l. L6 B" H) z2 f4 M+ k# Q, W* f
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;4 \/ K7 ~4 {6 F* F7 Z% U1 F
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
6 ~. J# \" \; |Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;4 `0 p2 p) X3 W. J; w9 |" \
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;" k; V  a% I' y1 O' u# o5 ^
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
7 K$ d6 i+ e# L( x# UDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
! C9 {7 E* Z5 O( J! q6 iDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
5 x* \# |7 I- d* n" RDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
: I3 S" h/ X" uDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;/ F  o/ z/ b& r. \) [8 b/ x( w
$ ~& X* }: v- G
/* override diags mask for selected modules */2 [. |$ m' L0 a* C& d
xdc.useModule('xdc.runtime.Main');; ~; E0 l1 S- g
Diags.setMaskMeta(
; }' g. T  Y5 d0 C    "xdc.runtime.Main",
' A8 A. s# n) w7 r    Diags.ENTRY | Diags.EXIT | Diags.INFO,
4 `) a. [3 ~% t    Diags.RUNTIME_ON( a: r8 a& ~7 t* w* U
);! T; t0 [9 _; T2 `
& N! e7 n3 z; P$ O8 j
var Registry = xdc.useModule('xdc.runtime.Registry');, j  H! {# t3 Z& J
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;: I# m# |/ y5 z# D
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;0 p; `8 a9 R. B6 `2 s
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
0 m2 ?  u: l+ E7 O: s1 L( GRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
8 O: H  ]4 A2 ?5 A" m) P* I  c+ h3 m5 i# t5 ^7 s+ \- j  G. }
/* create a logger instance */( e7 x. ?1 a1 x0 a& ]0 d/ e2 i( U
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
) M8 W& n4 a% Y5 k% }var loggerBufP = new LoggerBuf.Params();
. x$ x; x' {& W3 O3 D, A6 DloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */8 z& @1 S6 S9 B! W& V
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
. v, J# F' Q* y/ Z3 g, H
) B0 A: |6 g4 H* z9 i0 _* O& [var appLogger = LoggerBuf.create(loggerBufP);4 P) s* F% q& O
appLogger.instance.name = "AppLog_Core1";
2 q1 {; M  f, I, c) tDefaults.common$.logger = appLogger;
5 q6 V) ?7 s' {& u5 xMemory.defaultHeapSize = 0x8192;    9 c% B* ]4 K- ]+ E1 |6 e
Idle.idleFxns[0] = "&LEDStatus";; G2 G+ M1 ~1 X5 q# O5 E
Cache.initSize.l2Size = Cache.L2Size_32K;
: c- Y# Y. f+ _  p$ @4 K+ B  l4 W8 r6 B* v! s
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-4 10:05 , Processed in 0.045755 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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