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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
& }$ b0 k: m+ Z
5 A9 v" q  n- h( V6 Y0 M    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
' d+ T4 m4 `8 z% \* N
. c- E) F- L$ }5 |其他程序段。。。。。6 y3 Z$ [0 m9 z
4 E4 W! T  s& h0 O: d# b
   free(x_d);
6 ?$ _+ ~+ e5 e) Z& K  x4 E% H% Y6 T) t2 q- D
使用DSP侧单独调试功能,验证动态申请没有问题," \3 H, I4 h5 ^  o5 [( V( R

% v) p- p3 h' H% r4 j7 {但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。; W  a6 n& E0 s- C" p
) K7 G: |2 O. r- h
" D- T4 r8 o* Q4 S6 l2 n
8 q5 n# h1 G, Z8 ?' I
( ?7 m" C" k+ W, v/ i
' @$ B" T* G% ]% p

' }1 l1 W8 D0 D: }9 E0 C$ B2 a0 h9 h1 H; p7 d+ d
* g7 K! j0 `' o% T2 W; Y

0 F1 N& e. d  N9 |. H3 l; ?: D) K$ D
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明+ b  M  H$ Y6 w
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
6 r# @$ D& ~7 w9 J% G(不过疑惑的是,为何单独DSP仿真就没有问题呢?)" A" P0 b8 Y& S. x$ d# T9 @, v
% r3 f0 [5 ^% X  h" O  d* s& E
是不是需要在DSP.CFG中进行配置% w/ d4 [: f& a3 ]1 W
我现在的配置为. G; C* O' G0 f: T, I% F& E8 \5 i* [
) ]7 k- B' l5 {8 P1 j5 I
/*  L9 `8 `" v3 V# f; A9 ~2 w
*  ======== Operating System Configuration ========
3 c. J7 H9 m/ ]1 J */
# S) h, H: g: _% E, j+ b! }3 X! a! Q
/* no rts heap */
: e4 Y1 P/ g: j' e' c% w* i& HProgram.heap = 0;
/ v/ J) Y5 v7 Q; @3 M$ ]Program.argSize = 100;  /* minimum size */, r# p% G% c. j3 H
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大1 k4 ]  e5 A0 s& m& g
& J. P4 D+ \# _
/* create a default heap */
& @) v5 I) B0 ~1 V" ^- lvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% G) X  I0 F& @. e' p3 yvar heapMemParams = new HeapMem.Params();
. h, c* _1 _- v3 Z+ a) S: q) bheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
. B+ Y% Y+ M- g
2 U% q9 \3 g$ G  u
var Memory = xdc.useModule('xdc.runtime.Memory');
4 x: z8 X/ b+ e5 z- X5 _1 cMemory.defaultHeapInstance = HeapMem.create(heapMemParams);# t6 Z3 d; V1 ^0 F

; c- h: e1 o- w. v: ]3 q- S  v. r/* configure System module */& M0 |) Q9 @* T2 V6 u/ b: T' y
var SysMin = xdc.useModule('xdc.runtime.SysMin');
% E7 t7 {+ l+ m" n: Q! M' JSysMin.bufSize = 0x1000;# D( v* `6 z4 ~3 u; K
SysMin.flushAtExit = false;% U# @; N+ |( R' v
( i; g; ], A# f9 ]: j$ z
var System = xdc.useModule('xdc.runtime.System');, a$ ~7 |, Y  H6 z  j3 O2 X' @
System.SupportProxy = SysMin;
5 b6 k4 ^$ l' J  B7 d) [0 [
' J- u2 O0 S+ D6 e/* configure SysBios to use the lower half of Timer 1 */
4 }- a1 x1 i( `# e2 s, C+ [var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
  _; T6 L5 i0 @5 U6 Q6 mvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
: W3 c, z" I8 p  w0 n5 yTimer.timerSettings[1].master = true;5 H( u/ R7 u* C, v" `& O
Timer.defaultHalf = Timer.Half_LOWER;
- L! }9 w7 c* N& ~. c% ]Clock.timerId = 1;
6 e1 R& j7 ^. W( t  X
1 G* K( i5 k8 h+ K% m5 G
: D: Y2 S$ i$ ^8 \8 Q" K( Z/ r/*
; {( g1 ^1 ^: z: Q *  ======== Miscellaneous Configuration ========
& k# a+ u. Q! H */4 {& L3 [) c) _

& g  W6 ^$ n' M/ H% N: `) e- X/* set default diags mask */$ h2 q) x# Q/ ?
var Diags = xdc.useModule('xdc.runtime.Diags');8 P( _( \9 Z! g
var Defaults = xdc.useModule('xdc.runtime.Defaults');
+ L: ?& G7 L4 X% f
) X) T. Y. G8 H% u3 X2 |Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
8 I$ l8 Q6 i7 X0 O; [, z0 U# q7 s9 S: UDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;$ O4 R* `1 J/ y* q! a* _
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;+ U% ]& P8 _0 Q, D% V* A
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
6 L4 y! O5 C; z9 [0 d% B( qDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
* y# p4 @. g# }& T+ MDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
- I1 }; @) B8 I: IDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;! b- T; W+ V1 Y% W
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;, b0 d7 i/ W* }( R$ W2 {! s5 i
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;0 D( x3 X- B7 z: C+ |  |
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;0 \- S% o9 i! ?7 U+ A: F
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
) B' F) }+ D- C7 oDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
: u1 E1 K! @4 @* Q0 }Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
! l( g9 q6 G* h6 hDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;' c9 g2 D  s- v  D

2 m. p, u5 a& D; L8 [3 x/* override diags mask for selected modules */7 s( S( G  @8 M$ c6 {4 t. s+ {4 r5 _
xdc.useModule('xdc.runtime.Main');( O7 z5 C9 A  _1 \& t
Diags.setMaskMeta(; F( s8 h+ Y2 R/ F2 h, F
    "xdc.runtime.Main",
" N. w' m& x$ L2 V    Diags.ENTRY | Diags.EXIT | Diags.INFO,8 n% j* X' D" h  ^
    Diags.RUNTIME_ON
& D6 `. `' W( B- O. {);
& Q0 {2 g- N2 R1 N
3 U  e1 ?0 x4 W  z+ Q5 f- Dvar Registry = xdc.useModule('xdc.runtime.Registry');( v$ S1 F9 \! h' `; j
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;* c/ r) f# q6 u& j, C) d
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
6 B$ c% K8 Y2 i/ n* HRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
8 E; R: W7 N1 n% L& q/ p2 lRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;) |( j& T3 d7 _; ?) N8 w
4 D  q; t! w( _
/* create a logger instance */0 h3 s8 {) {) N  @) r
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
8 X! E& K" @. U8 b% mvar loggerBufP = new LoggerBuf.Params();
1 g) n2 ?! h' l4 H4 BloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
, j1 c! l+ l* Q3 r$ m! _; uloggerBufP.bufType = LoggerBuf.BufType_FIXED;
* a' @# J& k/ V/ r- w9 q% |: [$ D3 x  M
var appLogger = LoggerBuf.create(loggerBufP);* Q$ ]4 ~  S2 x) C& r
appLogger.instance.name = "AppLog_Core1";+ W4 ~0 A6 C7 b! M$ `, B) i
Defaults.common$.logger = appLogger;- _& s6 K# v8 h- w2 m; q# ^1 |
Memory.defaultHeapSize = 0x8192;    / A8 C& H, V$ p4 @+ W
Idle.idleFxns[0] = "&LEDStatus";1 s3 Q) y- U/ m9 m$ A
Cache.initSize.l2Size = Cache.L2Size_32K;
# T) ]7 s4 `* {4 ]+ U/ a$ R0 n! z8 l% G7 w6 o/ N
回复 支持 反对

使用道具 举报

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 */
+ @/ V1 `7 ~+ evar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
; M- N3 b2 @7 `+ kvar heapMemParams = new HeapMem.Params();
- q% a9 Q4 r, e7 L1 s; T. }heapMemParams.size = 0x4000;' d0 Y! ?1 }/ M* O2 d5 o% t
$ ~! ?- T6 ^+ u0 A
var Memory = xdc.useModule('xdc.runtime.Memory');( i, L: w9 h, W$ W
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ B& u& O; g, Z' f  w3 J. F9 Q! S+ I1 ^( Y# E( X0 u
我大约calloc  每次共计大小为5K*16bits,
" T' \# M$ E/ k8 n% H而默认配置才0x4000、需要改大。
& B) n) t; C& b% s8 a. W" o$ n4 w' f
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
4 k+ B2 h' h) g, K9 R8 h2 r# y' B! ]Program.heap = 0;; t. h- w/ \2 }! J' h
Program.argSize = 100;  /* minimum size */: B* Z0 g! o/ e% t
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-16 05:43 , Processed in 0.045270 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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