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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构( V' w+ x' U2 B
$ Q8 M' Y: c# E' b4 v6 L, q9 m1 x
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
7 _( B5 f+ s9 A7 u$ p3 M  L3 l* ?  i4 J; N3 T& e' J9 g
其他程序段。。。。。
7 k0 l  O7 E  ]4 N
2 V6 g9 }* H4 h8 O. d8 o! R   free(x_d);
' O7 ^9 \2 m8 I3 X- \) f3 j6 \7 |, O) p6 ?9 q$ ~  |
使用DSP侧单独调试功能,验证动态申请没有问题,5 u7 ~/ w. S" k4 Z" [! k  G

9 x: \) i! t* Z5 ^/ v但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。* H4 r8 b0 m6 M8 N
4 _1 Z7 H+ q& Z' G8 z. C
" W9 j) K( K. ]0 b, m- ?5 s$ ?
) L( R* v5 O% m( f* j/ _

: }7 \; m2 w1 E" U; I0 H* ^/ v! L9 n- d
' m" U% b8 _# T( ^$ u- {$ [; Z
' k. o5 s, Z' W9 s

* a4 h: T8 ]4 E7 ?
' F& {! W: e+ z5 ^! k; a
7 |- s" H& X. e' U  o8 a
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明9 S# ^. ~. p! c  W3 P$ L# m9 U
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
/ ?! M3 ~% D& A(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
8 |) ?. r0 ]& }+ F# U6 |
) u1 z6 c) z3 H1 c# g$ e% ?
是不是需要在DSP.CFG中进行配置$ g9 H! _  [% d# n+ j
我现在的配置为
! K6 H6 ~! j4 y3 z: a8 }
$ }. q9 y7 t, t. h7 E# X, J/*
% ?1 s8 F( {2 Z *  ======== Operating System Configuration ========0 v! C1 s* B; h+ \5 a9 x, h; F* x
*/6 _1 q6 v7 y6 b/ J, P7 u

/ @. f% Y$ j, K; _/* no rts heap */
4 [+ _* p3 Y6 E. OProgram.heap = 0;2 W6 M) O7 ^* P; f
Program.argSize = 100;  /* minimum size */2 @- |" y% x# L* K, }% h0 d
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
* W! n: B! e( D4 S4 z
8 s  s  l  S4 S4 d3 W" E. k( i/* create a default heap */
: f) Z7 ?1 |; q( dvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
5 D9 `% S9 s1 H; Q5 N9 P6 qvar heapMemParams = new HeapMem.Params();
5 S& t. R5 V/ f5 w9 r+ }heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
0 ]+ b% g: L/ d" F! M& Z  w) q7 S+ Y, j6 C  x
var Memory = xdc.useModule('xdc.runtime.Memory');* O) O3 c- C2 ~: N9 h% y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
& \3 V' |! d3 J5 ^$ n( z* M, C2 t% q' S3 T+ `4 c; Q( y
/* configure System module */4 R4 U; B& G& j1 g
var SysMin = xdc.useModule('xdc.runtime.SysMin');* [- Q4 a$ }" A; G; U
SysMin.bufSize = 0x1000;
( F. A/ v9 ?9 S$ Q/ _SysMin.flushAtExit = false;9 C, Y# O0 o8 p) U# @' f2 \
& P$ }; R+ P; b% {
var System = xdc.useModule('xdc.runtime.System');- _- ?1 z: A  s9 Y1 K5 S
System.SupportProxy = SysMin;2 q" j  u" t; b/ C# g

% w; X/ c6 o' j1 i) a: A  Z/* configure SysBios to use the lower half of Timer 1 */, z( P6 s" _& r5 x2 M: v* f
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');  D' Y/ h# ]5 v# s6 J6 U$ \. ]% g
var Clock = xdc.useModule('ti.sysbios.knl.Clock');$ d9 N' m! V) F  g: ^( o) F  \# g
Timer.timerSettings[1].master = true;0 z+ i) _! g; h. o, A4 j: w
Timer.defaultHalf = Timer.Half_LOWER;, b  K" A  x- I2 I' G
Clock.timerId = 1;' n: @1 {3 ^) m9 Z7 v: q3 f

, Y7 m9 h3 N! f  j: V* L& z# e4 ^+ Q( I+ N
/*7 m! c3 M, U! @2 W
*  ======== Miscellaneous Configuration ========
3 ]4 w, }- I6 O: d' R7 n* @( K7 b$ O */2 `$ I+ _/ Q9 N, [/ w( x
8 S- T( y' n, y7 S
/* set default diags mask */
$ Z# |  V( `. U0 Nvar Diags = xdc.useModule('xdc.runtime.Diags');
0 @& J* z7 u0 ?4 S% Z6 B8 ?, qvar Defaults = xdc.useModule('xdc.runtime.Defaults');: m6 l- A+ Z8 U  R2 c
, H; a7 {: T& n$ U
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;. |# P$ ~; @. n8 g# J, O8 I
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
" A* o  ~5 [1 t. w; Y, dDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
, Z2 i) w% z% A: l7 QDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
6 \$ J+ _7 l  U3 ~  p: BDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */( q: H- v- C$ ~( u
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
" X0 A) s% u5 o1 t' QDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
% d6 j  v4 N2 N( DDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;6 @" d+ W+ Z5 r& L- z
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
& {) h; x( t- k. ODefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;7 ~& J4 Z6 v* i; Z2 L" y) ?8 f$ K
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
* a# x& y. Q7 B% WDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
6 Y1 U, _$ M. y6 a. cDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;9 [: b4 U& G: R
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
/ J( h  m( R6 g9 V/ C2 X3 Q, L. V4 L3 D- L6 v! Q1 C, L1 `0 N; A
/* override diags mask for selected modules */
( U% Y$ s5 F/ V& ~2 d) Y) I6 L* Bxdc.useModule('xdc.runtime.Main');4 S  S( n, h  z4 x" T$ i1 D5 y- H( F
Diags.setMaskMeta(
" A$ p3 A3 |8 b/ t! S# F8 W4 B; M    "xdc.runtime.Main",
) Z# {3 o9 @" a5 G" b- p- X9 j6 {    Diags.ENTRY | Diags.EXIT | Diags.INFO,6 Z) }( Q! P" Y+ J% Q: m3 x* q
    Diags.RUNTIME_ON! ]$ `+ x/ {7 P; ^
);
2 q& D) [7 P9 k  Q# W' O0 {+ `
2 E, m* ~& {, ^6 o$ c: z) [var Registry = xdc.useModule('xdc.runtime.Registry');* o9 S# k; k3 z/ h% ?8 R. W
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;0 H3 @6 v8 _" }7 H; r
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;7 r( V; s6 `0 N, g/ C& b
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
) \$ T" ^! B8 DRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
  N# ^$ P6 t; Z8 w: @( w5 w! b% n1 ?
/* create a logger instance */4 U5 T& y6 b+ [! n8 O0 z: s- d
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
8 q# [; b: o- l& Y4 m: s  ovar loggerBufP = new LoggerBuf.Params();
% b: C  W  W3 a; TloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
/ q0 t/ a: z( H$ ]8 BloggerBufP.bufType = LoggerBuf.BufType_FIXED;+ K: K& D$ b6 Q+ @' _5 [" i
  E* |- O2 W7 m$ k
var appLogger = LoggerBuf.create(loggerBufP);
4 m4 b  e' }0 E  {6 [appLogger.instance.name = "AppLog_Core1";
8 n. ?8 U; O* ]& v7 r" l9 uDefaults.common$.logger = appLogger;2 m, x! T7 P! H8 N% O$ V! ]
Memory.defaultHeapSize = 0x8192;    $ d1 H: _: j; Z: E5 d- r
Idle.idleFxns[0] = "&LEDStatus";. P4 N& p9 S, |0 r
Cache.initSize.l2Size = Cache.L2Size_32K;
8 w$ V1 |% l2 M, }3 u, [' A# [
* C+ @% z2 H; P) w  p7 S
回复 支持 反对

使用道具 举报

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 */7 Z8 T! q/ f5 E6 B1 ^; m' A
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 g$ l8 u' P- W/ E: I. H7 H
var heapMemParams = new HeapMem.Params();
4 B- i9 w2 z$ z$ C8 b4 ?heapMemParams.size = 0x4000;
3 [; ^: f. j# W# R" m# I7 ?; E
2 f5 y5 q7 l! m7 l2 u) r: p* ivar Memory = xdc.useModule('xdc.runtime.Memory');$ R+ Y4 ?6 a3 z* H: S
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);% {$ A& H3 b# b
/ B) d( O, O, E; f8 R  T* N# T
我大约calloc  每次共计大小为5K*16bits,2 [/ ?6 t5 g' ^/ t" j/ G5 s. _+ k/ E
而默认配置才0x4000、需要改大。% R; n. r& p9 v( |8 s: f
3 a9 I1 d# y: j8 x
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */% b5 ], n0 G' ~8 ?5 y# o  U. g
Program.heap = 0;' D. C% O* X% t( @3 G. Y
Program.argSize = 100;  /* minimum size */* u: \- V% o0 l9 A. ^( ?) m/ i
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-4 11:11 , Processed in 0.057983 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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