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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
- y# U9 v" r9 E+ g: Y3 S* P1 Q" N4 x; V. Z4 T) |3 ]  L: K
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
2 x* m/ W  E' v6 V  u( l9 n9 y3 t$ D2 M( G" n' b6 u6 I6 Z4 T: b# S
其他程序段。。。。。
: e# K7 s* a4 i/ i , [$ i# a& e$ d. B
   free(x_d);
$ o" H! k/ H, ]( _& P+ G6 J9 T) y6 t- x
使用DSP侧单独调试功能,验证动态申请没有问题,
; ?, y5 E3 Z; ]' I* |- j- M! a0 ]  u. I+ s
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。! O$ b+ {, Q  _; d
. T8 t8 l6 L. f" T: g& G+ W" G. q) z

4 y, u, i5 T$ m7 v% X/ {5 N. Z& B
- g2 W8 r* N1 |4 \; [+ \9 u6 y, B! X; B1 E5 B. P4 H8 \
5 T7 q( [& g! J( S  e$ I: m

: P# `" u3 |" }
% ~' ~, ~/ H6 E+ c- }5 T2 V) V0 z

. P" [8 a) @' G" V1 f7 {) S" I0 C$ @/ L( Y- }; X# S6 ?9 k  k; m* z* ~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明1 b4 n1 k" O8 H- p: p; x
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
5 \! m) J5 H2 C1 T2 X(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
# I2 o7 T' B# H7 v
& t, `) ]8 t. O
是不是需要在DSP.CFG中进行配置
0 b: A( P- I0 n" b我现在的配置为
: S6 P. ]; C- C1 o! F* x6 r, c1 w
/*
* X% T4 W/ w5 n& d2 W *  ======== Operating System Configuration ========
- X! D( F0 Q, j9 k& v/ V */+ U6 B) ~2 h" C: r+ s  @8 D
; w* w: M; b- \
/* no rts heap */
/ V* r6 [1 Z0 _' G1 eProgram.heap = 0;& m. D) ?* v" D& g2 ~  N2 g& J
Program.argSize = 100;  /* minimum size */- T, P: a5 i; c4 A6 s! ~# @
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大# u3 e4 {; b2 q1 q& J: z% U; Z
" U) T' }2 N, R/ F: c  T  o
/* create a default heap *// h! f! A0 y9 f( Y7 y& T% n1 t
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 D  }; S' P1 e
var heapMemParams = new HeapMem.Params();
6 ], A. q. y4 cheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
' O; P" `& n: C# q9 V! h
( |2 G1 f( A1 x; Z' x+ r
var Memory = xdc.useModule('xdc.runtime.Memory');
( n' b' Z8 m6 d, ]Memory.defaultHeapInstance = HeapMem.create(heapMemParams);1 n# K. d& k: e, l& ~6 i5 @
/ S* y! N) L$ M0 ]
/* configure System module */) T+ Z: R2 \, D+ F2 t
var SysMin = xdc.useModule('xdc.runtime.SysMin');5 p6 n% a2 a: H9 k
SysMin.bufSize = 0x1000;! T. M% \, `+ q/ Q- D& w" S
SysMin.flushAtExit = false;
  P8 M) v  w5 J3 \
2 |) U: H6 P1 m# s& Z' ^- Uvar System = xdc.useModule('xdc.runtime.System');2 ?% M5 C9 q' K. ~
System.SupportProxy = SysMin;
6 X+ o+ U9 g* X' |8 Z
% M2 H, n. |5 {& L  X$ q/* configure SysBios to use the lower half of Timer 1 */
6 m# P/ X1 b% S" V# qvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
5 g' T2 L6 W" C" D0 _7 vvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
) j$ D" C9 B- S; ^/ Y7 \Timer.timerSettings[1].master = true;$ P' T9 ?% B6 m$ L2 A8 R
Timer.defaultHalf = Timer.Half_LOWER;( m# p' G' H, W/ A) f) L% H
Clock.timerId = 1;5 ^( i, T% N. ~4 q' ]% C& {, f
" I3 L3 t. k% A; \: D! q
2 a! m! s+ L+ p; \$ l
/*
5 c( R. A9 ]4 e. i+ b- j2 D *  ======== Miscellaneous Configuration ========  ]/ W1 L1 Q+ \& e; f
*/- M4 z; i* e) v! G) z& c8 h; M6 K

4 C, f5 m/ Q8 f/* set default diags mask */0 t) I7 A2 e$ ]2 L3 \/ G0 \3 `! B: `) X5 o
var Diags = xdc.useModule('xdc.runtime.Diags');. S0 e) g* R5 g% G. V& {% \9 f
var Defaults = xdc.useModule('xdc.runtime.Defaults');6 V6 j! X( Q7 H3 b0 O

, k. u  F5 u' f! Y1 a7 @; d# o" V% H4 TDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
1 L% K3 j) m) P3 ^" a2 pDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
7 a, E4 [2 F& x; s, m2 s8 N  M  IDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
. b) o7 j+ v2 p0 @: W8 qDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */1 x9 {' _) @' M' g8 e# q
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */% v# q; `2 B% ]  c" Q
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
2 U7 E2 Z+ }2 ]0 V) r: q: v* ^Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;7 l1 |4 y7 f, f/ t2 D) L
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
. X! V# A% I! m, J# {0 vDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
3 `$ Q0 D7 h0 J- i- Y$ e7 x/ zDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
0 }3 [. J$ i' [) w! g2 Z+ M, {Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
. ]9 e$ U9 P) }8 S6 VDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
5 v' F% A2 E" V+ j/ o% iDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;% }8 I) f# W9 q1 B1 t# g. [
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
% R& ]( c" {4 O/ T) J+ q: g3 l) `% F7 b5 h
/* override diags mask for selected modules */6 F. D3 w# |* d
xdc.useModule('xdc.runtime.Main');
* i, ]. l/ S9 W* T2 C6 m+ gDiags.setMaskMeta(
9 a% y/ ?0 D) \+ U& R  P6 Z    "xdc.runtime.Main",- F4 i6 p7 Y4 L( i4 e
    Diags.ENTRY | Diags.EXIT | Diags.INFO,7 L3 q) i( F. R4 p) N2 W' K0 {: g
    Diags.RUNTIME_ON! M1 C1 b3 u0 @3 V' Y! W
);
: h0 S: e$ _: k1 k( v
$ [- d# m# t' Mvar Registry = xdc.useModule('xdc.runtime.Registry');3 b% ~1 e) X' }
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;2 R) s' C* P+ p" U% p4 g: y
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;4 G/ n& p+ L- q- J
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;  C; ^3 m) H" C2 e( N8 {
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
+ ]1 ]7 g* J) d: R* {4 b  J1 J/ f+ s* t4 Z
/* create a logger instance */
$ O% w9 ^6 G( k0 J) v3 O5 [var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');  o. B# [7 l& j9 X4 [- ]$ ^4 D. V
var loggerBufP = new LoggerBuf.Params();, E1 r4 P2 M  N, `
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
7 Z  q5 \5 M" r# tloggerBufP.bufType = LoggerBuf.BufType_FIXED;
+ K  t+ k5 y+ x+ z, t% E( D. |' }3 i5 |5 a% a' {, x% l5 Y7 S
var appLogger = LoggerBuf.create(loggerBufP);
8 `* Y& n1 {/ ]+ N6 L- h. }  ]' YappLogger.instance.name = "AppLog_Core1";
* A  w; {. w6 r! JDefaults.common$.logger = appLogger;
& p" V& I$ B, m/ T' w" UMemory.defaultHeapSize = 0x8192;   
# l1 I1 v+ h' ?! dIdle.idleFxns[0] = "&LEDStatus";
6 @% s0 W  |# KCache.initSize.l2Size = Cache.L2Size_32K;. B/ N/ l5 q: F3 A. d( ]
$ l+ C# \, R0 X3 |. _
回复 支持 反对

使用道具 举报

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& A/ e5 z- j6 c8 [var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
. L: [/ d  Z1 V" Evar heapMemParams = new HeapMem.Params();  l2 |: p" \4 Q1 Y
heapMemParams.size = 0x4000;
: m6 B0 F- S3 H  n4 i
0 O! E% D- i" R9 \0 [' [2 ^$ \9 E4 H6 Pvar Memory = xdc.useModule('xdc.runtime.Memory');% J% e$ K0 \$ ~
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);5 w, |2 g1 R* J- U  B8 i; G# A' i
3 l+ q. j, G2 ~2 {
我大约calloc  每次共计大小为5K*16bits,
1 s8 L' n6 S; j, H/ A$ Z9 i而默认配置才0x4000、需要改大。
# J! ~( g# i' l
4 P+ [! }# H: {' n. Y2 j
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
. u* T. j- {( {- w8 VProgram.heap = 0;
: _# W. k4 S! g+ G+ _Program.argSize = 100;  /* minimum size */
& X' F: T# y5 L; w4 U; B( ?Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-11 10:34 , Processed in 0.041656 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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