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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构. A1 {& R0 m, N3 D  t% O
9 A. F; B3 l, Z' @! ^
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
( H& i( ^* }( X, q2 w; L. g2 ]7 Y$ t7 f: ?
其他程序段。。。。。
* T: ]+ v/ I2 ]7 D+ t , l! z; a% j: e4 U, C
   free(x_d);5 h. q9 W+ v4 c

& g2 a: W* ^* b: Y使用DSP侧单独调试功能,验证动态申请没有问题,
% t3 C# M/ u; i/ D' s( f& ]& D+ x( J- j  z; `
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
  Z  N, J% k; N0 e+ q  W# R

& d1 c" g. g; H2 Y! x0 ~" v
/ I9 f+ w0 j+ [/ L) y
2 O( `4 ^" t4 ?! \: n7 t5 h5 m8 T; B- F& N
/ N& c; h+ @+ h" f" [8 X9 _: Q

' `  K* P" S: k/ f* z3 \3 e8 F, g8 L

/ i* d5 m  @; X( u! `/ U5 _8 H
/ `7 q$ k4 R4 X! k  R
, Y7 }" c/ ?7 \7 x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
2 x+ \4 f9 P' p- P  P, fProgram.heap = 0;' m' Q& o' S6 v, A- D$ Z+ `: g. X; r
Program.argSize = 100;  /* minimum size */5 Y5 H' B7 T3 C9 k, @! i
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
  y5 [: X: A6 [% |3 l7 w/ H' }var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');" P8 x$ c/ S8 e6 ^# d3 x
var heapMemParams = new HeapMem.Params();3 O! o* b! w- s2 \2 B+ ^$ o/ b
heapMemParams.size = 0x4000;
6 Q7 o; v) r) o; `- i0 k: ^- Y  q) p8 X6 o- h+ _! h
var Memory = xdc.useModule('xdc.runtime.Memory');& |2 a2 ], G8 o
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);) n1 k. Q$ T6 V+ \4 A* l3 q" R

; k. `. E; v9 k: J4 d" l我大约calloc  每次共计大小为5K*16bits,
' b. r% ~6 o# J# H6 v/ ]而默认配置才0x4000、需要改大。5 S$ T( m2 D8 W' B& u2 T, {: G1 D

! O% C( v  T0 G  g- @! W  q) f/ s* N
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明* `/ s) c) [3 S1 v: H
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
6 S0 h7 ]. Q5 E8 I(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
- K* t+ o/ j, j! v6 u! {% t2 Y
: K( y0 G8 o9 ~+ L
是不是需要在DSP.CFG中进行配置
3 o. h# C. t- p我现在的配置为5 c+ }. I& T4 t1 h. g

  C9 g0 Y+ {1 s# d4 g9 F/*
0 ?6 S; U6 B: A7 A% W. H3 ? *  ======== Operating System Configuration ========
" S4 x3 T2 h" Q6 t$ h */% o& l" w* u$ F0 u6 H
  p6 j) X3 c: v7 x/ u
/* no rts heap */
8 B! r; d. M0 M; z5 Y& zProgram.heap = 0;9 e: d5 r* _3 M* z7 b
Program.argSize = 100;  /* minimum size */
/ q1 |7 J7 F) h& }Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
8 o" {) s  Q7 F% P0 P& F( t8 M8 t0 j3 S# b' M
/* create a default heap */
% e2 ^$ l" Y3 o4 G+ u7 G# B; h: w/ kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 P8 n5 P* t) ]6 r8 Uvar heapMemParams = new HeapMem.Params();
6 C- `; h: Y8 z3 m0 C5 EheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大' i+ k4 j0 }7 l4 P+ V9 {8 [: w! B
9 U) {, p  X$ @( Z( _
var Memory = xdc.useModule('xdc.runtime.Memory');2 I1 ^" j. H0 @
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);4 S" J/ O0 F4 q8 G+ U: x

$ x/ O3 Q8 Z0 e+ k' w8 {6 P/* configure System module */9 g- J( e9 v# M4 p" u
var SysMin = xdc.useModule('xdc.runtime.SysMin');
4 U- |* i3 e% O0 d  P6 R8 S. ]1 BSysMin.bufSize = 0x1000;
' ?( T+ @4 t+ _( [, q8 `/ f! WSysMin.flushAtExit = false;
. c9 `1 A8 N' d! L4 u) j+ A$ ?6 @; h. ~
var System = xdc.useModule('xdc.runtime.System');/ K! Q/ A! s7 t% y' Y  _! Z
System.SupportProxy = SysMin;3 R4 F# r' _; j. ^

: A" G5 X+ N+ s/* configure SysBios to use the lower half of Timer 1 */
4 {. E. N3 j  S0 ?8 tvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');. k4 m% f7 l. ~& K
var Clock = xdc.useModule('ti.sysbios.knl.Clock');, C$ h$ O) H; p$ W0 c% r
Timer.timerSettings[1].master = true;
0 M- A' T' v2 a. J6 N5 W, yTimer.defaultHalf = Timer.Half_LOWER;7 \5 K( [! c2 ~5 ]+ g+ g9 u( ^
Clock.timerId = 1;  m6 A% l+ T; O  B; @4 j
) `7 V9 ^9 y& \% P+ D! e: `, r$ k
5 w4 d" ~% V# t8 G2 D
/*$ X( E4 _- g" L3 i
*  ======== Miscellaneous Configuration ========
( c% h5 d8 @: ?( P0 y# V */
! J' n) s2 B8 e1 I6 z, }
4 s* y9 r( r& G0 ?9 M. s3 ?/* set default diags mask */2 r8 k2 K6 W  i0 H  g& a
var Diags = xdc.useModule('xdc.runtime.Diags');$ @* O+ [& G4 I+ Z; l" w: R, C, m  p
var Defaults = xdc.useModule('xdc.runtime.Defaults');
+ F  M9 t0 d8 }$ A/ y/ Q
2 D) W$ d  U9 G3 h3 l! H) q: hDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
, B& D) v* P* q$ D! _& m+ ]/ WDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
, f( |- |# Z! N! F% [Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;/ a6 p( E- ?* h
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */! M+ h8 T0 A* A9 a/ k
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
) a$ Y0 E  |8 P  s" VDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;* O0 @( w% [' @6 {  C2 C9 f8 I3 b
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;2 x: K4 g# K" e0 c* R
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
6 D6 W" j, @4 d0 k1 u7 A* BDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;9 }+ N0 c5 ^4 `+ m& ?% }- X: @1 H
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
; G! n0 R7 R- s1 b% UDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
! X, _; M, @8 K0 P; Y  hDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;- [+ _+ M  V! Q( f
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;' |' G0 e0 D/ Q6 e
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
- O& X' v! p* i& Y
0 z2 W1 Z  @5 g8 ?8 }* x/* override diags mask for selected modules */1 M, L  m& |$ q3 P/ A5 ~2 a+ _5 N
xdc.useModule('xdc.runtime.Main');+ a+ Z6 G9 p# U. E3 v$ _/ n) S
Diags.setMaskMeta(! w. I' p3 Z: z
    "xdc.runtime.Main",) j7 k# Y) Y( o% |; o# S. A/ a
    Diags.ENTRY | Diags.EXIT | Diags.INFO,$ t+ D( V# D( t9 Q: \9 |( r
    Diags.RUNTIME_ON: T0 v# t+ f3 b. c4 l" {4 Z0 u- i
);; P. G1 G# t$ M8 \# r4 V7 e" o
( a' t- ^+ {" R3 G3 W
var Registry = xdc.useModule('xdc.runtime.Registry');
/ u' s  w9 ^' ~Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
  b- G- K* M1 b- ]+ CRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
$ p7 R1 b( ^6 J" q6 ]- IRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
5 J3 A; y# p+ ?' O9 @Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
! l0 S! z+ w: i3 H1 C; N0 }/ ]9 l/ y' H
/* create a logger instance */  D3 r! }% s) c; O% L& A* o- F
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
- K$ Q+ J) Z, ^6 O1 h* D2 Yvar loggerBufP = new LoggerBuf.Params();) q- ?. [; q4 J" k* P
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
$ z6 d! A) `4 Y0 d" ?loggerBufP.bufType = LoggerBuf.BufType_FIXED;
3 o& p) z* c! ?; z* `
& `$ o5 L* B: w# x/ W' d0 jvar appLogger = LoggerBuf.create(loggerBufP);
! l+ q0 q+ z0 ^8 Z! O# oappLogger.instance.name = "AppLog_Core1";
  w- H7 L0 J0 ]3 z8 x, f6 a+ bDefaults.common$.logger = appLogger;3 d3 L! D5 M5 v& X* G* Y
Memory.defaultHeapSize = 0x8192;    9 V$ Z# L* m# h) E0 r
Idle.idleFxns[0] = "&LEDStatus";
( t3 b0 R  n" C8 m4 Z0 ECache.initSize.l2Size = Cache.L2Size_32K;
, Q7 \) t$ |. ]: S
2 d$ I) q; S, t) @5 P
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-11 16:01 , Processed in 0.043505 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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