关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
$ g- K* l4 z+ A8 U
# D6 p+ i7 {1 K$ I/ T    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256+ K, k" j6 k2 ^" Y; K; W- {. Y

/ k2 v# ^1 v5 h* Z其他程序段。。。。。
, m6 B# A9 Y! g& m. T 8 x" R# R% U2 K% W
   free(x_d);; p2 [( z$ m0 ]; v; P+ T) J

  W) X& E+ u; M  s使用DSP侧单独调试功能,验证动态申请没有问题,2 }  `0 s' j2 ], _. r& |. o
+ v7 N* @% M& G* n8 A* J) ^
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。7 H6 ?- F  X7 ~% F- G7 ]% N

( |! c: b+ m4 T6 M9 {' E* y0 ]1 S" }/ H3 J  b. U

/ Z/ a% P$ }& p2 k/ z0 B8 L! m4 j8 w: g' T, Z5 _% W2 e

/ {3 X  _0 C5 k% ]
/ W) J( M2 a. }( P% {. a& }5 [# s0 ~. Y# X5 Q1 ~
8 r$ L! h2 ?% D  Y# ?2 R- q5 ]
- F0 }+ H+ A) B
; a8 G# D2 h4 _- U, q  R
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明6 f; Q5 \) J2 y+ W& K0 g% H* b4 }
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
7 f2 A' j! `1 i6 h  J8 e/ K(不过疑惑的是,为何单独DSP仿真就没有问题呢?)  Y1 T: @& r% z1 E( b

. ~- e2 |/ `9 r2 r是不是需要在DSP.CFG中进行配置
3 b& n+ v( v' }7 q4 R我现在的配置为1 m, {3 p5 Z, F% T1 z- U

3 p) \# I% N1 y: O5 U  H/*: k5 U; }  d. f
*  ======== Operating System Configuration ========6 s" q# S9 }0 t, T) ^
*/
. A" }9 v, X# d3 q, P( I  V* S! F
2 }% M) v9 i$ o- ?( Q/* no rts heap */- g5 V4 a- F, Q7 p$ F. r# O
Program.heap = 0;7 S$ B4 \& R& X) j
Program.argSize = 100;  /* minimum size */
! A. d6 U( c0 Z5 sProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大4 K& u* u* U0 l9 h7 ]+ G8 E
, P6 P2 A9 I! Z1 R) O- m# Y- Z
/* create a default heap */% |* W9 D+ z, `  N
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');, D. D3 v' F; \! u& B& G* z; u
var heapMemParams = new HeapMem.Params();' z0 a0 F) G: m- \2 w$ w' f
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
7 S7 G  ?% t* v  j) q! H# K4 g# [$ w7 m* s
var Memory = xdc.useModule('xdc.runtime.Memory');
9 x) E0 y' I) [' w/ o3 r6 Y5 wMemory.defaultHeapInstance = HeapMem.create(heapMemParams);7 s  x% K, n' k
# Z8 X1 S: _% l+ j. X
/* configure System module */, W9 }. `# z4 `, g% v
var SysMin = xdc.useModule('xdc.runtime.SysMin');
! f$ Z2 p/ |* L* W9 x7 k& S+ [SysMin.bufSize = 0x1000;
5 g: R0 m: h; b' `8 {SysMin.flushAtExit = false;: ]: B8 y; f0 H) ?7 l( D1 G

' {; ^) r, G+ E3 Nvar System = xdc.useModule('xdc.runtime.System');
# ~$ L+ y% H+ h# f( x" n! q3 @- SSystem.SupportProxy = SysMin;. O5 r; F2 L5 d
" P  Z+ }) D* C7 `9 C
/* configure SysBios to use the lower half of Timer 1 */. J& |+ U9 x, J" k
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');1 s/ C# e! e0 d! D) s, I% C- t9 I
var Clock = xdc.useModule('ti.sysbios.knl.Clock');: \* q9 k, Z2 T* k' g2 ^
Timer.timerSettings[1].master = true;
% f. w& f. q9 `' F6 g7 ~Timer.defaultHalf = Timer.Half_LOWER;
3 A, ]! I- e6 k7 X. [' hClock.timerId = 1;% d7 A5 N( q, V: {) z$ A: D

1 f# ]* c, P  f! K+ ]' f
- E8 B4 p$ g7 ]2 L/*
- c8 c. D  q, F *  ======== Miscellaneous Configuration ========
6 Y2 b* r7 \3 L0 F8 Q, e9 L, G9 l! r( L, ~ */
8 N2 ?6 |! ^1 o" {8 a
0 a" h. k8 G0 Q4 [; j/* set default diags mask */
4 ^5 W+ U9 a5 S3 j5 v! Yvar Diags = xdc.useModule('xdc.runtime.Diags');8 s. @* M3 L& T5 a+ X" W
var Defaults = xdc.useModule('xdc.runtime.Defaults');
. q) C$ L" M. @9 F9 M4 U& [1 N' A. p: i
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;. Z1 r& v3 H8 e
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;% e2 A4 ]) ]) w9 W7 z
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
/ T/ N, e5 P: MDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
" K* W" T: J. F9 F! ?6 h5 eDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
. C- ^8 ?$ j+ u" o( t8 a  G$ N7 i9 t: EDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
; ^" l# k. W* y" P9 {  A' e% W  [Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
7 n6 `" i) Y- D2 k  t. {; X3 o  lDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;0 C: f- \) k9 z/ Q6 ?7 ]. f
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;- D( U) x, M) L
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;' h; N. [( N4 y' k
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;) L% U% ]. m7 Q, g8 g
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
  P" Y" r  |$ DDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
/ ?6 i1 u3 }$ \8 c2 ODefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;! f: }1 S" {9 _# ~, e
' ]" ?6 E; z9 Q* H. ~9 b" u+ S6 Z
/* override diags mask for selected modules */1 c6 h4 x3 r/ P0 N
xdc.useModule('xdc.runtime.Main');
7 ?7 \* Q1 S* a, V0 b. z0 FDiags.setMaskMeta($ l. U7 P  |0 H
    "xdc.runtime.Main",
4 t1 K9 b& j# y4 H  O8 |! Z6 g+ y' P+ }    Diags.ENTRY | Diags.EXIT | Diags.INFO,
+ ~& ]: R! n# y( N% v* }6 a+ B    Diags.RUNTIME_ON" f" X* Q% A" F; m7 E
);7 M7 L" l6 T! Q1 p1 J2 A
$ L8 J; O: }5 O, A9 U, x2 b
var Registry = xdc.useModule('xdc.runtime.Registry');: h7 M. C9 L* L- O
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
! @4 y! K" m; [( z1 p; Y# TRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
5 x3 J  }% W# i2 y0 F3 t0 ^0 sRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
, n4 ]& I- q* J! r8 t3 W2 SRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;, B$ K( L4 j' b+ s2 C# U% U7 B

; v2 ?; O1 E$ b/* create a logger instance */
( S# J  ]. D+ O5 |var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
5 E$ k' Y; n9 k6 Jvar loggerBufP = new LoggerBuf.Params();1 X; i$ a# ~1 T. ?5 L
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */6 U0 g5 Y8 D# X5 x+ F8 m
loggerBufP.bufType = LoggerBuf.BufType_FIXED;9 {% T+ Q5 X! M0 F

$ _  u0 {  H! Xvar appLogger = LoggerBuf.create(loggerBufP);
( ~2 o: _. ~& ]: x3 c+ D* FappLogger.instance.name = "AppLog_Core1";% v1 ^2 e+ |# U7 S
Defaults.common$.logger = appLogger;
) n9 P8 k" G0 Q/ @Memory.defaultHeapSize = 0x8192;    3 v  @3 |6 M* d
Idle.idleFxns[0] = "&LEDStatus";
2 Q2 v- b, c" R' Y: pCache.initSize.l2Size = Cache.L2Size_32K;
2 Y) a, t' E; }0 q# m
0 l- k9 c. P( B9 @
回复 支持 反对

使用道具 举报

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 */8 i  n. F7 E  c6 U: W4 o1 q2 F
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& w- T: Y2 }; d8 Q) b7 D6 q7 q
var heapMemParams = new HeapMem.Params();
$ M$ K# N& `8 |$ x0 @+ YheapMemParams.size = 0x4000;
8 m& x5 @7 J# P" U8 g* h' |' q* H( U/ g9 r1 R6 i
var Memory = xdc.useModule('xdc.runtime.Memory');
1 f" r- l# Q$ MMemory.defaultHeapInstance = HeapMem.create(heapMemParams);0 e) p, i1 k; t, W4 o( u

- V8 T$ J9 X$ Y我大约calloc  每次共计大小为5K*16bits,$ K# J' c( D* E7 t* _/ j/ P
而默认配置才0x4000、需要改大。
5 c5 m# H; o0 v0 V# x, @/ m" U
4 \1 G3 d) m! P# F4 K! W+ U
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
) |: X  J0 N" ?, _- F/ X' @- y1 x7 ]Program.heap = 0;
& v6 u7 b- ~- Y/ UProgram.argSize = 100;  /* minimum size */
: E  k/ Q! x0 P. pProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-14 08:39 , Processed in 0.042014 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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