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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
% i# i, G& s8 x: `! F: |3 w* ^. y0 N
" B) G! s( {  N. z" D    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256: t+ a! c2 i1 t# p7 j6 t! p
. j( I, m5 x" R2 l' o
其他程序段。。。。。3 W1 w* x7 P1 J0 o& n
6 k7 A2 N, C. `: M
   free(x_d);
$ n7 c4 v4 z' L& |( l. L1 L! A" O: F5 A. V# u4 u3 c  _
使用DSP侧单独调试功能,验证动态申请没有问题,' b9 v( P- s7 Q  o6 }
8 H- [! l, B5 D, m8 i8 V
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
7 n& A2 t; y8 ?  e+ g" }
+ f9 U4 [  f$ y6 R5 x  r0 |
3 I2 P  S6 M. S1 B$ l9 g) k

6 X1 U9 K: d+ R, X  V
7 U. j- J8 K- l7 ^; n6 A# W4 {2 W* H& g/ c7 X1 W
2 t- K) O# q  d8 ~$ X
+ }" u2 _  w2 U& e
+ ~& u' L1 ^3 j6 C9 K$ b" K& A
6 f$ D& l6 G" L; B1 k0 H

+ v8 ^- J; O0 j; z2 F8 B
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
5 g% q/ Z7 I. b我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下/ x# E6 |6 `2 m
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)  f* W. W; }  t' |

/ w& r1 ^6 R" D是不是需要在DSP.CFG中进行配置
( m6 R' D4 b/ H  i我现在的配置为
; x1 v& R5 C$ u  U3 D, e" B
& R+ H( s' r. t) ~6 B/*
/ u4 P- g$ w$ W/ m2 M! Q *  ======== Operating System Configuration ========. ]' P( g8 i. T  d& b8 Z9 S
*/+ h, j% U8 m4 f8 T
& x2 t  p+ _$ J. z3 `
/* no rts heap */9 y, k- A2 E" d
Program.heap = 0;# E( i, I) c) k5 c
Program.argSize = 100;  /* minimum size */3 G+ {: v8 L6 W5 e
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大' Y( _* C; S. K5 S
# @' r) X8 ]8 d+ a' V
/* create a default heap */
# y) \  |( g  m8 f. Z( J$ Gvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 E7 B( c) C$ R. g
var heapMemParams = new HeapMem.Params();! o) f4 F5 F, z# ?- V+ D3 Q5 m  N
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
1 Z; z: B5 ]! q4 l
: b; }' f5 W( G7 P
var Memory = xdc.useModule('xdc.runtime.Memory');
& F, e+ h( F) ZMemory.defaultHeapInstance = HeapMem.create(heapMemParams);" y0 P/ A- r% ?

) {9 e  [. ]0 q7 i/* configure System module */) e+ L- n) i% C7 m5 @% L1 D
var SysMin = xdc.useModule('xdc.runtime.SysMin');3 }' a2 J' K1 N7 ]) ^9 U6 ~
SysMin.bufSize = 0x1000;
; b& w, j2 V7 Q3 tSysMin.flushAtExit = false;
# G, u9 C, f* s( h! t: R% o
; g8 J& R# }6 {) z( m% n2 uvar System = xdc.useModule('xdc.runtime.System');
! h  b1 p# \* ~' a% s  Q( t* ~* TSystem.SupportProxy = SysMin;
+ P; F* @! m6 Q4 q
, P2 U. X* u! W$ W6 k& T% {2 h" k! B/* configure SysBios to use the lower half of Timer 1 */& d% G' |2 G% u, @6 F8 K: _
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
5 H/ u& z7 X; H# Z( n5 Yvar Clock = xdc.useModule('ti.sysbios.knl.Clock');1 K" X' F) Q5 X: p' Z8 u- ?
Timer.timerSettings[1].master = true;8 L' P, ~4 u& ]! o
Timer.defaultHalf = Timer.Half_LOWER;1 m# f. H! X3 X3 C& I7 n  w
Clock.timerId = 1;
- O# b' N1 t2 c7 v! V/ Y1 l
. B* M/ ~9 q" k; W
4 K: W) y! X# Q) _8 H: f/*, C. Z& J; V* \6 A4 k* y! y
*  ======== Miscellaneous Configuration ========& }" p$ j) T$ f
*/
3 |- w: ^6 d# L2 F* `! t9 B1 j, t6 z& M5 N4 i! e
/* set default diags mask *// U/ {+ I2 ^5 l* Z2 x5 _
var Diags = xdc.useModule('xdc.runtime.Diags');$ k4 L- n% r1 U. ]- X2 y. }
var Defaults = xdc.useModule('xdc.runtime.Defaults');5 V, T; C, L& J- D" Z/ E

' N4 P3 v/ ]1 h1 h: S% g! JDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
, g$ I5 s* V$ v) |Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
. I# F/ S9 L! n; H1 tDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
/ ?! |0 D' i, FDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */9 E3 [* c% c, y5 \! \
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
8 e! Y3 h6 D$ i# i" FDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;/ R( H; j. Z- e' e; O2 m5 [) A
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
) W2 M1 z! a( {Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
, A* |  N, U7 E2 |9 f9 w' N1 KDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
9 x' N$ M% \- |6 kDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
9 E/ a, k: w# w4 u6 I2 e; }Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;) ]; p* J, c" h9 [, R9 G6 m
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
. E$ e7 D& I0 ~/ H( K) PDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
. R) X7 W- z7 U9 h5 [Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
  t2 S4 A: ?2 |2 v9 @% M( h5 |" L% O2 a2 G. v, w1 x1 I3 o, Z
/* override diags mask for selected modules */* p: K( M4 }8 p1 ^$ }! G
xdc.useModule('xdc.runtime.Main');2 V) j' }$ d% P! T0 c0 B9 m
Diags.setMaskMeta(
2 P) ]3 j% }% c1 j    "xdc.runtime.Main",
3 }* S. K1 t$ w5 P" A! Y3 U/ \/ O! m    Diags.ENTRY | Diags.EXIT | Diags.INFO,
: w- z1 Z! E; y) r  I$ I0 {    Diags.RUNTIME_ON$ o% O0 V8 Q  ?# |3 w# C7 @+ a
);- K. ?8 R, ]! b+ W3 w* l
& y  W- B4 P' g
var Registry = xdc.useModule('xdc.runtime.Registry');
$ p) k7 T! o* E5 }  y. ?Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
; W# J7 _3 v6 i/ M# I5 ^Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
$ b* F8 o8 Q6 n% j! jRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
; X& Q. T8 U5 J. h2 Q; f3 sRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
& Q! U# R+ [9 I& c2 b# c2 O1 G3 c' r7 c9 r2 e( G
/* create a logger instance */
& S* l. i% l0 \5 }: Fvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
4 c+ q7 G/ ]2 U9 uvar loggerBufP = new LoggerBuf.Params();) j% V1 Y$ |: P& h( f* w
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
1 u* K6 ]# L$ L9 ^loggerBufP.bufType = LoggerBuf.BufType_FIXED;  K; O. R) k1 h/ N3 U9 {: z) Z% p

; y8 h. o" W, C/ ~var appLogger = LoggerBuf.create(loggerBufP);5 m4 y/ d$ E: m3 h% w! |$ M
appLogger.instance.name = "AppLog_Core1";( X  e1 r: j0 o% H# g5 s  [0 g
Defaults.common$.logger = appLogger;
  x! x) q" u' b, l$ U: d* RMemory.defaultHeapSize = 0x8192;    ) `! Q4 N8 M: |0 q1 X1 c2 J- h) K
Idle.idleFxns[0] = "&LEDStatus";8 {# t/ c5 s. i4 e
Cache.initSize.l2Size = Cache.L2Size_32K;
7 |7 {- m) A" N! ]$ O' R% g$ z' m  Q! ]1 H& _7 P; Z* o
回复 支持 反对

使用道具 举报

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 */$ I; f3 `+ C& ]
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& N5 M5 ]! d2 ^: O: m( Qvar heapMemParams = new HeapMem.Params();8 N& |* ^& a9 @) d
heapMemParams.size = 0x4000;. k/ `- M( N( O# n. l, ^

# G3 d! O$ b8 z9 rvar Memory = xdc.useModule('xdc.runtime.Memory');  f, p7 N/ H0 q+ k% @
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ C) V1 E) |- }- O) ]
. j& f8 _4 G- O0 Z: d我大约calloc  每次共计大小为5K*16bits,# \0 V% h! W' L+ c
而默认配置才0x4000、需要改大。
' [4 w) }9 i1 y1 @  F% q7 K# V3 ~0 k- `% X* \
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap *// Q# w( P4 a+ ^' L, s1 n2 H1 w+ q
Program.heap = 0;
% N" a/ }, x$ c/ `Program.argSize = 100;  /* minimum size */
8 X) R$ R( \/ L* U  k' a7 s* LProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-22 19:54 , Processed in 0.046560 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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