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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
: B6 c+ ^7 t. N3 o! E* C
1 O, `) r  Z8 N2 i8 _  _2 W/ I    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
8 ^5 w8 z" Q6 j- S( U6 ?/ O
+ k) j3 J: w8 l. ~; G其他程序段。。。。。0 x* d; h4 K8 d, h: r
  f9 P4 {! i5 |) @  E) Z+ k
   free(x_d);- ^9 Z  C  P$ s: t% s
3 H2 Q, x2 z: x/ ?3 |5 n
使用DSP侧单独调试功能,验证动态申请没有问题,
0 U+ A5 \' G2 f1 E5 ?- R+ F
1 m! z& o/ C' i1 h4 Q" c但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
9 r$ a5 c: W4 R' j% K

  Z9 \- l5 v" L; D( b
! O2 m) U4 _4 k0 Q% e
+ k7 r& P/ x$ C
' @* Z* Q" J9 h0 \& \: i/ Z, v/ Q4 a5 g9 ]' ?4 s/ w3 I  o5 z
; s$ t# Z9 H" i3 Z, g
" M$ D/ ]& z! X8 n
7 |5 ?1 J# l% K1 T2 M
( V! S) n% m5 S8 v, K8 m
$ \( ~; [6 ]1 {! q7 p3 W+ n
分享到:  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 */; {4 D+ {8 p: G
Program.heap = 0;
3 }! I1 `, k3 ^$ ~. C5 pProgram.argSize = 100;  /* minimum size */
" ?0 r$ l' ^: c1 d8 v: [Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */0 V0 c5 t0 m, H8 r9 S0 w
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');, Q* x/ v) a+ g* J
var heapMemParams = new HeapMem.Params();
7 F" u( Q7 w, H0 Z! a' p; GheapMemParams.size = 0x4000;
$ u% H2 t+ E% J+ C" T# F
( B. V: C+ d* ]# O: d* U, M) pvar Memory = xdc.useModule('xdc.runtime.Memory');  V+ ?* n: s! D9 r! `7 d( g0 l
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);/ |  D, t# a- Q# u7 e

; q4 Z$ \  A- b我大约calloc  每次共计大小为5K*16bits,4 r  `8 `4 U$ B1 u3 Z
而默认配置才0x4000、需要改大。
9 U# l' u* n/ z/ ]3 t/ N: p* r) _& \6 j9 }* v9 m' E* e
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
( N4 i6 O) Z3 c我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下! L  l: w4 }2 ^3 O
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)2 n3 d' Y5 G, m5 I/ u3 p- j( U0 L

7 l' E9 V- U; v; p是不是需要在DSP.CFG中进行配置
& M% q' c, A: v. q1 _. k' |我现在的配置为
" R* p( D2 \  e1 t; x
& B$ B4 w! l1 C* z/*1 n, @" V8 z- |
*  ======== Operating System Configuration ========6 `/ u1 X" x' {7 a
*/8 x  ?" ^4 X; ]9 K5 [- Q

  ^5 ^  o) S+ a4 R+ P- D/* no rts heap */7 T! ^& n9 ]% i# P
Program.heap = 0;, l3 p+ V( j9 W. p$ ]
Program.argSize = 100;  /* minimum size */
) e2 n) A! P8 z$ {1 k- _& A* ZProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
2 k, c# a' N& H0 v) X' P/ K0 v- a& }& D# P: Y7 q3 U
/* create a default heap */
6 q; H# o8 X* |( o1 C6 Z6 d/ Uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# b! F' z" l- W9 ]5 `
var heapMemParams = new HeapMem.Params();
' y( |5 O. S& s5 B' o0 ~4 N4 V* CheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大6 ?9 ?' g3 d* ]$ J+ `/ C9 Z0 d

; d. s# H$ d; S5 L6 Y5 D2 E. {
var Memory = xdc.useModule('xdc.runtime.Memory');9 ^6 {( ]1 u. l$ Z! K. ]/ f$ |1 A
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
) t  H; a7 g# ~% r0 c1 X2 V
" ]! @+ z& \; V- V: K( K# m/* configure System module */+ q& M5 N0 [1 b5 C! a/ M# Q
var SysMin = xdc.useModule('xdc.runtime.SysMin');% g( H4 `; O/ h. w9 q7 V0 F7 K
SysMin.bufSize = 0x1000;, n; K6 O) D1 h: y) b
SysMin.flushAtExit = false;
, S" E5 T& {- l# e, j9 r) W% o, Q/ R/ A( @% F! f  p
var System = xdc.useModule('xdc.runtime.System');
8 h1 S# g: p1 j1 D8 v( `System.SupportProxy = SysMin;
/ N8 v/ i6 [# p- e7 D3 W
: F% ]- ^! W* K% P* `5 W! S/* configure SysBios to use the lower half of Timer 1 */8 A# v! q9 U4 c& Y- _8 H+ K
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
7 m! J! l+ L5 r& p. W9 b" Vvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
7 L; L" t9 r; r& q$ ]% K0 C2 _% uTimer.timerSettings[1].master = true;
2 u% L7 x, z, P( S0 k0 eTimer.defaultHalf = Timer.Half_LOWER;
# Y) k2 l6 J* D( e; rClock.timerId = 1;6 C$ u, Z# w+ H. M3 S# k) ?/ H
) _: w( D/ A2 j; z
1 Z" G( j8 G8 ~
/*7 E8 n; s' `" l4 R. ~" K5 q) @: F
*  ======== Miscellaneous Configuration ========
: z2 v! ^# h9 O) L; m* o */( o( ^- h$ {' I% S) C: R

4 W4 q  B3 _5 c/* set default diags mask */
% r: p9 {8 k) b( P4 m! u( P$ Svar Diags = xdc.useModule('xdc.runtime.Diags');( |2 v2 `2 h' O3 E% `: \
var Defaults = xdc.useModule('xdc.runtime.Defaults');- W! x) b( ]! @0 x7 Q% l
) d5 ?* ?. R( Y1 c" S5 b! y% b
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
  q0 f. r1 L  h+ v; U, pDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
/ \/ L9 H- Q1 I- m9 u) j+ NDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
' M6 i% u3 B- P! ]5 M( W9 q( ?, g8 iDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */4 C( N& s9 ^. v3 [& h  d* e0 N& |4 F
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
# u4 B1 R5 x* i5 J' U* E' uDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;  L; H6 t# E  v: E
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;% b& G& ]/ k1 V8 ]* y- Z
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
  N4 r9 W' i* V# B" YDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
# y) g  Q; X* DDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
) u. y" I8 I/ ~  o3 XDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;3 L* Y4 ]8 u3 \' o* x8 Z0 S; e4 x
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;) I& X0 V- ~2 ?/ ~. I
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
3 C3 l1 F# h! @9 z4 KDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;8 C  E1 T, A  T
- @/ }8 C) g4 `, A
/* override diags mask for selected modules */
- c: u4 Y, n$ e. h8 o( mxdc.useModule('xdc.runtime.Main');, o! ]+ H4 I8 x  o6 @
Diags.setMaskMeta(
' n+ m$ w% f. F& y9 [# L# o0 p: n    "xdc.runtime.Main",6 N% f/ Y! c6 }# P+ x
    Diags.ENTRY | Diags.EXIT | Diags.INFO,4 y: q0 i/ _) [9 B2 D
    Diags.RUNTIME_ON. u8 G; M1 I* f5 C, M* ?! F3 v
);) ~+ h. k6 L& R  h- C. Y

9 ?. E8 c! l0 hvar Registry = xdc.useModule('xdc.runtime.Registry');2 c: n3 Z9 S- B( P  H
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
% u; t3 j/ r- f* R  ~, z) x) sRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;7 ]& s' H9 R' K' G
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
' Q4 R4 x: v8 G4 n5 ~Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
1 @* s3 W/ Y, p! U: X
" S5 ~+ w4 L/ k" a& N/* create a logger instance */
: l1 z$ ^1 ~/ m* F5 J+ J; |2 Z  xvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
& a# w! Y+ r7 c$ I2 V0 zvar loggerBufP = new LoggerBuf.Params();% H# G% Y: K* v0 u
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
+ V' |0 d& [, p. P$ }/ h% \  XloggerBufP.bufType = LoggerBuf.BufType_FIXED;, O# d3 H: y1 g
8 \# K  T4 T' o; j% r
var appLogger = LoggerBuf.create(loggerBufP);% I9 K5 F4 [& s- N$ ?
appLogger.instance.name = "AppLog_Core1";
4 I% w1 e, g+ N! H7 v. u7 N: YDefaults.common$.logger = appLogger;6 F! a* K7 I" E* B9 d- ]& k' d
Memory.defaultHeapSize = 0x8192;   
. ?' d( t8 b' N" t7 S: t# ]Idle.idleFxns[0] = "&LEDStatus";
; N8 ^7 v* T5 ]2 r  L$ W; A6 p4 OCache.initSize.l2Size = Cache.L2Size_32K;; o/ x4 N- ]3 M* n- e  u1 E/ Z

, _3 s, U. C3 J3 W( Y6 ~
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-30 06:12 , Processed in 0.040961 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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