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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
" m- E% M6 T# F' v
! q; c- Z  f; D& ]' x, _    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256/ C% A- l; @: ~: O' Y

% i: q  D. ]) u0 a- o$ j6 {其他程序段。。。。。
& {$ D7 |/ n! Q1 N% d+ M
0 [, d# T; L. @% [   free(x_d);
3 k# N6 y: l1 Z( {- q5 y+ ?# W$ {$ j
使用DSP侧单独调试功能,验证动态申请没有问题,
4 U$ P" K$ a9 z5 T3 `# ^# L( @% P
2 g; k3 J- s/ c- e0 r# D0 Z但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
7 L: G' t7 |2 Q% ^& i6 u2 a; X, D

; `" N( k3 z3 p) {% R, Q% }3 V+ P, ?, \

% L, h/ d6 F8 X) }" [5 n7 D* Q- g) W! ~$ u$ Z3 ~! V3 ]: q/ d$ [+ [
3 r: E# o/ N6 R$ N; c' S8 t

2 N6 r# f; E& u/ t
  M, l/ T7 d' X7 o2 u3 n+ n7 |
, i" m7 f2 ]! L. u& `2 O" ?! W* e2 X: B( D

4 x9 R$ e  |. I# r0 c- f
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明  K4 k3 t- I3 D) _  C1 G
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
4 n3 a: t: s- I(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
- A0 r% \1 _1 X8 i
  V& v( {, A. f( M: `9 ~' U4 F: I
是不是需要在DSP.CFG中进行配置
+ S* w: A2 M1 e# F7 {5 U我现在的配置为( i! H. x8 [( D7 ~1 W1 f" E

0 w4 v7 A4 t6 ]8 z9 \7 m  ^/*$ N2 O- e% B+ j/ }6 {/ p- @. J; w' z
*  ======== Operating System Configuration ========: ?& l* @) o" }, a' _$ h7 X' ?1 ]
*/
! z! @- \& \  d' a% ?+ v  K
' W2 Q. M7 m/ @/ _9 J, k: y/* no rts heap */
4 A$ X. V( k0 T1 ~( \' E" g. qProgram.heap = 0;
% B: J& e( `1 s4 NProgram.argSize = 100;  /* minimum size */* m5 [! K4 f7 ~# F7 m& m4 r
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
5 y7 H1 I% s, j- x5 e. q
' \) h- u" J# s: `  r/* create a default heap */
0 _3 ^" T2 z* j1 g1 t. rvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
, Q; y2 |6 n; i  ^- z# jvar heapMemParams = new HeapMem.Params();
, ~! I1 T% V' d* T; C/ e8 c! iheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
4 I8 i8 T5 B, F9 q) Z1 m; e
1 W  [& l% ?& d' f2 F2 t; X
var Memory = xdc.useModule('xdc.runtime.Memory');
; P; S* k' F$ p& w( QMemory.defaultHeapInstance = HeapMem.create(heapMemParams);8 K3 Y3 w( x" J1 c
/ H! G6 A2 m, M+ ^1 j
/* configure System module */
7 N+ F+ }" H) M. B( J) mvar SysMin = xdc.useModule('xdc.runtime.SysMin');3 B. [; c- Q7 [; K- c
SysMin.bufSize = 0x1000;8 g$ V& b- R2 t' f6 W' ~2 N6 P) M9 c
SysMin.flushAtExit = false;
; J( R8 b  o$ s, n5 Y& ~1 X! |2 z$ F5 U! [' M
var System = xdc.useModule('xdc.runtime.System');$ V9 s8 i. Q/ D
System.SupportProxy = SysMin;; M# J; c' I' t6 I. ?

( o7 ]! G3 ^5 D$ p2 z6 _% C  `/* configure SysBios to use the lower half of Timer 1 */
1 Q( G0 g; h5 ~' Z: T& O' c8 ^var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');- V+ [* L5 R  P$ R
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
& ^- S' X% K; eTimer.timerSettings[1].master = true;
5 [# e( ~3 L5 d$ t% {! t7 @' [Timer.defaultHalf = Timer.Half_LOWER;( t0 }3 W) V' c& m8 X
Clock.timerId = 1;
$ M- U0 k3 c, G; k* i; w, O( w  ]9 Y7 K( a/ Q  @7 x9 [

0 v+ }0 y8 _) e* e3 d5 X. }/*  o4 B' t% R: k- E
*  ======== Miscellaneous Configuration ========) g$ W5 i/ J) F, Z+ B0 M  U
*/
# A8 j+ D: \( Z" l/ H% ~: m$ l( E# S1 u* y. A
/* set default diags mask */5 u/ u- U7 ~4 t4 a5 \) y; d
var Diags = xdc.useModule('xdc.runtime.Diags');7 A* ]$ c$ t& l( e& s
var Defaults = xdc.useModule('xdc.runtime.Defaults');/ b, R* n+ c$ |3 E: M& h
2 P- T3 W4 L4 _1 a! X
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;1 L$ Z! x) F; k) y/ l( S4 N$ t- H
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
) a# |5 M+ b% p. Y- w9 o% ?, ZDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
3 v6 x! _$ X: t9 h: B5 ?' ?Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */: y& ]2 ]3 ?( _8 e) `- b  N5 }% M
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */7 X/ M( z. z1 M# E
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;$ k, u+ |4 k4 C5 B, T+ p
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
) N: o, z$ @/ L0 @! xDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;8 s: i! j1 `+ @1 d* X
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;2 [/ F2 l) y, z' g/ Z) j
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;+ V( _9 i+ N5 r$ q  s; S  }
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;8 @( E! u* x* B1 W. P
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;) S* g  Z% C4 W) H& o4 e6 L
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
$ C4 r; A, p3 FDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;% ~$ z# n. ~7 f. w" Q

2 ^) u: h* R, U+ k* M/* override diags mask for selected modules */) b! L' g* V& L, V9 \2 Z
xdc.useModule('xdc.runtime.Main');2 ~0 C6 t% D9 a
Diags.setMaskMeta(
( O  V7 n/ V% W9 T& ^8 R& f    "xdc.runtime.Main",
7 U3 T) N9 m: w% d    Diags.ENTRY | Diags.EXIT | Diags.INFO,+ b' B" n3 d7 d8 V1 _. P2 w
    Diags.RUNTIME_ON/ w5 ]$ H7 E4 k) |( ]
);
  G1 J: D( h8 Q7 z# N9 x3 N9 L1 w' W: r7 W4 h, v4 f7 W6 o
var Registry = xdc.useModule('xdc.runtime.Registry');. u2 y+ R; Q) ^: T7 p
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;( F: X4 }' u/ W( Q4 K& j" F# H
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;0 j8 K. O  a9 M; \% W  ]
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;" S0 B1 G$ y, q
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;5 |% x9 D( \8 n+ l# R" ?

1 n& A; D2 d+ L/* create a logger instance */
4 o1 p' g% y8 @$ f. Mvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');& j" r2 S' L7 @
var loggerBufP = new LoggerBuf.Params();
- j( ~0 l- W) ?. k4 LloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */: L4 k* ^1 M4 d/ V# Z3 X7 S
loggerBufP.bufType = LoggerBuf.BufType_FIXED;" K! R$ }0 h; k/ D

# {5 F) Z/ w6 B$ h+ ^var appLogger = LoggerBuf.create(loggerBufP);
3 W, G! b0 C% H9 N/ j, YappLogger.instance.name = "AppLog_Core1";
; `3 B  v3 V, g8 }' ~9 FDefaults.common$.logger = appLogger;4 h# w0 a. J( c# o: |  j1 I! m
Memory.defaultHeapSize = 0x8192;   
: b4 G0 o# M& X6 EIdle.idleFxns[0] = "&LEDStatus";7 [- s% L2 a$ U5 [
Cache.initSize.l2Size = Cache.L2Size_32K;
: x4 Z1 Y4 X8 k8 ]! @
# {- C  b* M( 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 */! ~: k! S# w8 Q- @! w3 |2 j4 D
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- {* l- W: v8 kvar heapMemParams = new HeapMem.Params();
, L  T: L' ^2 NheapMemParams.size = 0x4000;4 E* z( G* ^$ V+ Y0 b2 n4 T9 X: q
- w3 i9 b" v7 e. U9 |3 M
var Memory = xdc.useModule('xdc.runtime.Memory');
4 \8 {6 a5 t* V9 w" CMemory.defaultHeapInstance = HeapMem.create(heapMemParams);! ]( L( k/ p7 X0 ]* B) C' L
( `9 f. i2 e2 p6 ^. k4 z: W
我大约calloc  每次共计大小为5K*16bits,8 z+ V: ^8 o" ^9 C
而默认配置才0x4000、需要改大。
! |0 u7 e# h/ I- p% H3 I% j' y" B2 ^+ I' f$ X
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
; Y9 y6 l% B& A* Y$ j7 qProgram.heap = 0;
5 l) N) `9 s0 pProgram.argSize = 100;  /* minimum size */# g# @9 h* k: q* x' z' [/ V: |
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-23 13:40 , Processed in 0.041676 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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