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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构# y% r- N  _7 [0 M# Z2 U" W. Q. s

9 z( l6 X9 z* q2 X    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2568 I. p3 |( d6 f% I
2 {; e3 U6 H) L* K$ @
其他程序段。。。。。
/ ]4 `  V5 ?5 m3 A5 h# C, F, A
+ x3 m3 n, z+ p# Y& ~9 z0 `3 r   free(x_d);
, E4 O3 Z& ?* Z* u0 }- Q6 a! l3 q3 t# \5 }& L0 m
使用DSP侧单独调试功能,验证动态申请没有问题,
' p4 C8 e; Z) ?$ Q
, {# V; d. J) H1 G/ W但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
7 n* \# E- v! \; g2 F# E
4 s2 \: P: x# ]$ d8 x

& K% J& T+ D' j4 |
' |1 S. @4 ~6 d. P6 C4 b. E! g1 n" W" h' v/ Q  m" L
9 n, X+ L5 B" @+ h

* N) @: X2 t0 P0 r
' l2 r; P) e, ]5 a2 ~. R" `# Z! w# B7 q

- @& w" \# N% N; J# z
# ]7 x: r" p+ j5 P( L# g
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明, E( T7 z5 o7 r9 Q4 ?
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下1 X) w1 i4 V% \  C  f; d. M
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)& f3 D0 u. e$ Z

% t: D' A5 `0 O是不是需要在DSP.CFG中进行配置
* Q: g! @# K9 s/ q- J我现在的配置为9 j6 b0 _0 ?; r" G5 R( f1 `8 O( r

2 P% y/ g5 s/ i* L7 W6 N3 x/*
5 ~5 k: ?9 M! h8 s0 d. a *  ======== Operating System Configuration ========& U% y0 ]/ v! X% {1 {6 J, |: w; D
*/
. R0 j0 V( ]% r7 H+ ~! v$ e2 N
) e5 b; [% \% p/ k! c/ W/* no rts heap */
2 Y% E, s+ E/ U; K9 kProgram.heap = 0;3 O, `0 |- [4 c) z  Q8 T# {4 J
Program.argSize = 100;  /* minimum size */5 K1 a& F, v6 Z. M
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
/ h( F3 ]2 i+ j# g% w0 C3 C9 `1 n9 A4 t- M! {: b
/* create a default heap */$ e  \$ j+ s# j
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
# n/ Y: E. S: s  V; hvar heapMemParams = new HeapMem.Params();% Z2 k1 P7 e+ B/ w
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大# u1 G2 F( ~( C8 M% ]: m& E
& Q  ^- A) O0 {
var Memory = xdc.useModule('xdc.runtime.Memory');
% `  r/ ]; W& `6 i0 y, O4 i% KMemory.defaultHeapInstance = HeapMem.create(heapMemParams);& n+ i% V4 r% B$ S$ {7 l, `$ f8 d

8 O& c( S& b0 R( l9 C( d0 I: [6 ^/* configure System module */  K" @8 g# Y+ D) V( o. i  U
var SysMin = xdc.useModule('xdc.runtime.SysMin');$ t0 R! g* M; T6 O  e& q
SysMin.bufSize = 0x1000;
5 Q- M7 d; m1 tSysMin.flushAtExit = false;# u0 u0 K! O$ O6 K) ^4 K1 ^
. F2 n" G3 E7 o( n
var System = xdc.useModule('xdc.runtime.System');3 r% h$ \/ U2 o4 ?. P
System.SupportProxy = SysMin;
; _& J1 j1 Z: h# P8 |+ T& }5 g0 e2 r3 l0 ~
/* configure SysBios to use the lower half of Timer 1 */( r( ^, ~+ }% k$ \; m
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');8 L: M' `0 \, v) k  y) c2 }
var Clock = xdc.useModule('ti.sysbios.knl.Clock');6 G2 S( H# K" f  n6 f
Timer.timerSettings[1].master = true;
$ y8 F, G5 m- N$ c: P$ j# ?Timer.defaultHalf = Timer.Half_LOWER;
2 P5 P5 X" A# C1 LClock.timerId = 1;
" k4 f" @# U2 K2 u
1 G8 D* W3 b! r+ U) l0 p) J- G4 D& X2 I- L6 G& Y* J5 d* ~* O
/*
; G* e+ V! _" d* Y+ _ *  ======== Miscellaneous Configuration ========
4 w. q( E8 a9 _) s */
* ?/ a: _5 B, R8 m2 o& e/ D  x8 j% @5 v  T) y; ]( _0 M+ K
/* set default diags mask */
5 |7 ]) `# \2 E; rvar Diags = xdc.useModule('xdc.runtime.Diags');5 k% h; z, `' U- g  w1 r3 P
var Defaults = xdc.useModule('xdc.runtime.Defaults');
/ w, S. h* ^( f0 S" D$ {8 ?/ m, Q1 E/ @0 C
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
4 {7 S9 p0 g/ M7 ?Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
3 q- _! s; c6 VDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;; r6 i1 k. U* K5 r7 H7 O
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
" a  X" |; b, L! V; e6 C. {% ZDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
: b+ I4 o( L6 z$ I: d! JDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;) l+ x4 _( X" l+ X9 F
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;* W2 s" u: {. i% y, o
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;, c. `1 T0 r/ G  ^0 G
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
* N$ O  W) W% K; U! TDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
! C. i, `6 {, ?" ^Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
# t6 Y8 [2 F2 L5 C4 p0 }1 K" P) FDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
* K$ X  C% ~4 x* [9 yDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;% H; D3 B! E" ]# K9 [" O
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;8 p/ h2 \+ J/ O
8 D9 ?6 k6 \( ^
/* override diags mask for selected modules */& k, l3 `/ M, Q) q* v1 p
xdc.useModule('xdc.runtime.Main');
. I% y4 m6 o* H' q/ W7 y; JDiags.setMaskMeta(
. m) F: G* q9 w    "xdc.runtime.Main",2 v$ u/ f% }( f( z
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
3 J6 h) J$ w5 R1 [# W( U5 v    Diags.RUNTIME_ON
; C0 G( h$ Z) F3 [4 p+ V);
; q+ N' z# Q( E
% n  J4 f& T$ J- kvar Registry = xdc.useModule('xdc.runtime.Registry');
% v! c% x8 q, G) ]$ ^0 }; z: Q; zRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;0 `- ?* P" Q7 T6 M  A) A0 w3 a  s/ O3 r
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
9 I0 Y9 q% Y6 Q% d+ zRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;5 z( o) `# u2 q' ?+ F
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
) f) I/ V/ ?6 S! r. q5 w: y. O! \4 A$ ~: \6 T( Q7 {
/* create a logger instance */6 x9 L3 Q: b8 ~1 Q0 C/ ]
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
+ \/ p6 F" C5 [, n2 `  `7 xvar loggerBufP = new LoggerBuf.Params();
# z. v( _) H9 N+ R, Y8 ologgerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
- \, r5 B; t1 R) ^, l4 l, L1 [loggerBufP.bufType = LoggerBuf.BufType_FIXED;
) p( t7 ~5 n) }# n: G# l9 @; P" g; A+ O, s
var appLogger = LoggerBuf.create(loggerBufP);1 ], Z* r: f5 s" D/ h$ K3 U
appLogger.instance.name = "AppLog_Core1";
$ l2 G9 }+ M0 T' r! g$ c' JDefaults.common$.logger = appLogger;5 N& {5 T4 O6 i5 z+ P# [: ^7 T
Memory.defaultHeapSize = 0x8192;   
1 v7 z  M: d, C! K& {0 {1 eIdle.idleFxns[0] = "&LEDStatus";+ z4 ^( l3 r! E  o1 B: I
Cache.initSize.l2Size = Cache.L2Size_32K;
) |9 m4 k* g$ u$ u( E- F+ D$ B' y& K8 ~; ?( w1 E+ L' B( z
回复 支持 反对

使用道具 举报

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 */; Q. L, X7 q/ V: Y* l
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 m& D! @# V( N2 I
var heapMemParams = new HeapMem.Params();
$ \0 \6 [" y6 f$ j3 Q, M( MheapMemParams.size = 0x4000;
* `8 [) |+ T- R0 X+ T/ I: H( x, [
var Memory = xdc.useModule('xdc.runtime.Memory');% S: q5 J8 V$ n- z% A
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);( g: b$ o- x+ V2 Y: y: e
6 e$ e0 j" h5 Z% i: q# Y: s5 x
我大约calloc  每次共计大小为5K*16bits,& H9 G8 A) j/ l/ x% W" N
而默认配置才0x4000、需要改大。
+ x! ?+ w: B3 ~& ^) f2 m
  M& d8 p0 J4 L# Q* Y
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
' V' G( |% M; l7 q2 mProgram.heap = 0;
  w& M5 ]/ t, s3 B1 S& DProgram.argSize = 100;  /* minimum size */
) ?/ ?0 g+ ]+ x8 |6 rProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-20 10:52 , Processed in 0.044693 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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