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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构2 }/ I" U! W! J" }. ~
# B# G: q9 W7 O9 v. i9 u
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256$ }. m- F1 G- i

5 S+ _& i1 Z) \& `) Z; [其他程序段。。。。。0 D7 y; K8 ~1 O0 b  Z  ?& {

5 C# V/ [1 H) C$ [$ b! q8 A   free(x_d);0 q- \2 R! W6 g) _
0 Z8 E/ }. q9 n* U7 r6 D! R
使用DSP侧单独调试功能,验证动态申请没有问题,
3 B) ]& y5 H1 X2 f# `5 s: Q; ]* t" m0 y4 ~/ E% V  r+ N" d3 d4 I
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
9 i6 y# `$ R3 I

* }5 ^9 e3 d; t7 A) V1 ^4 ~7 M! V3 b) P5 W# ^
6 O+ X, m; |9 e
, [6 \$ G+ o) v& p: I! g" R* E
- Q+ j6 ?5 [# U9 t
  l0 q! F& n' l& ~5 S2 d
9 Z% N. n& t. N( e1 L$ v: @8 W+ L
6 F/ p* J# L' l8 N
, |$ ?3 M3 u5 I# h7 M
" [1 w  q7 V" H4 K1 ~, d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明: }2 [4 Y/ D8 e$ q
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下9 A  D1 T. y) O' ]
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)" j1 I" o5 F- O
6 z9 U% @3 Y4 P# ]# L5 U( H' ?
是不是需要在DSP.CFG中进行配置
: q6 C2 C, Q8 W. m% ]. L我现在的配置为
* ?2 a/ a; t" Q! N- x& J# q. _( d7 T/ j& o  z* d1 s
/*
2 R" K, z9 q$ d: L' R *  ======== Operating System Configuration ========& R) F# H- u' Q7 d, c$ p, Z5 q, z7 q! o
*/5 \, c0 v# s4 `% d: Y
2 h1 k& A, u6 B1 z
/* no rts heap */
5 G, U0 F( a3 bProgram.heap = 0;
7 T6 L( @  Y! R, WProgram.argSize = 100;  /* minimum size */; W1 m+ g" N# v9 V
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大( Q. L- U  E+ C2 B' t+ u/ a
& J8 C  f) a/ d( k  q1 D9 W
/* create a default heap */
* d9 }5 b8 W7 Q) h; v( Fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
1 X- {3 ?+ e$ k: r' P; T% Tvar heapMemParams = new HeapMem.Params();# ~% e. i) x3 C; _. L4 p
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大* B& z/ L3 ~' z
$ B+ b/ c) b! u, t1 h7 Z! d5 k
var Memory = xdc.useModule('xdc.runtime.Memory');) i" G- [7 |* g* U7 I% O
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
' b/ o, m- ]- ?! q5 d/ @, C' {$ y
$ N  m+ z+ z" O5 r  d0 o/* configure System module */
( L0 w' J8 f0 {  W9 r+ Z4 A- R" @8 Nvar SysMin = xdc.useModule('xdc.runtime.SysMin');5 E* z# x+ I. G% w7 b' x8 F
SysMin.bufSize = 0x1000;4 ?3 f3 E+ M, R" z. g
SysMin.flushAtExit = false;
0 w9 f- J8 t2 _- i! N8 [; ]( S3 R7 C9 K, ^+ e
var System = xdc.useModule('xdc.runtime.System');
1 j8 \+ d' m8 E7 ~9 \7 QSystem.SupportProxy = SysMin;
% X4 P! ~% \/ V0 x7 o9 f4 O! B
1 m1 |  z: f) c& i5 I* U/* configure SysBios to use the lower half of Timer 1 */) |! j5 A0 Z% E
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');# \* H# }( t% @8 d2 A" B( s
var Clock = xdc.useModule('ti.sysbios.knl.Clock');1 I( ^) ^' I3 b5 z5 `  o
Timer.timerSettings[1].master = true;* m; \  [5 B1 Z
Timer.defaultHalf = Timer.Half_LOWER;
) C+ s8 W; b3 z& N6 K' v$ jClock.timerId = 1;8 T" J$ Q' e- N

9 h/ W, t, @3 z1 Y
* u2 L* |  V- k& ^( |2 F  o" l/*
' h# [$ }9 M2 N( Z2 K# F  y+ b *  ======== Miscellaneous Configuration ========
% q. U6 U+ a9 E! w  ^4 Q7 B */( g! P0 B- D% Q7 E! o" W) l, I

) ~2 m4 e2 E0 x! f5 v& S/* set default diags mask */
) `) }2 G- l9 C6 q9 }var Diags = xdc.useModule('xdc.runtime.Diags');9 d" h, I$ ]- j, H
var Defaults = xdc.useModule('xdc.runtime.Defaults');" n* f$ u. f# {$ y1 r) O
& e8 O+ |3 }/ ^$ I; L% i/ b) D
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
/ \7 d; z! z" r( @Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
4 H% [5 `2 l7 ~5 D* K0 V6 aDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
7 H% l/ L6 B* Y, r/ FDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts *// B4 B! K9 I" K
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
% \: \, S/ n2 t9 H& N+ ]' v2 ^- tDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
2 F8 k" B( P' q2 tDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
# g0 E$ L& @& E# ZDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;5 r  f$ {# u  P, E4 C) Q
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
, b9 N0 ?5 m" `+ l/ tDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
( `' a  ]5 G' I; X/ b3 V5 iDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;0 C0 z# w5 I/ A" d! J7 S
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
9 H5 q% f8 K6 X7 d! fDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;3 J9 ]8 x" B/ |2 n% e
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;- n' C4 `& H) c' Y) X

) T8 E  c1 G* Y/* override diags mask for selected modules */' z- s9 f9 m7 I$ E
xdc.useModule('xdc.runtime.Main');. q' ?( ^, l. V  v1 W
Diags.setMaskMeta(
: @0 H$ I0 W( ~, K4 n    "xdc.runtime.Main",$ b, k* j; F, U  e5 ~3 b$ P; M
    Diags.ENTRY | Diags.EXIT | Diags.INFO,7 z4 y, @6 f$ |2 E
    Diags.RUNTIME_ON
" N' T$ z" x4 u);# N  r9 x/ J0 d3 S1 _2 b  [' w
6 |# i( D: c5 S2 u% j
var Registry = xdc.useModule('xdc.runtime.Registry');
5 ^- G. e7 D" v" ~' Q6 ]# l: {Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
5 @& S1 x$ v3 Y! rRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
6 L: [7 e  i7 k2 C  nRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;. k' b3 G0 L) R$ P# O
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;0 z/ x! H( |2 \( t- r

& j$ m. k: ~) Q) o2 {/* create a logger instance */
: Z& H! M7 E' Y* U  i, f- rvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
. @- G3 d4 V$ ~# \5 c9 s7 yvar loggerBufP = new LoggerBuf.Params();- q7 _7 M, S; P7 b9 k
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */4 d8 [* v7 l6 c1 O
loggerBufP.bufType = LoggerBuf.BufType_FIXED;. |8 P! A2 P# A. o3 N; z) Z
; e+ M# S: m/ v! y
var appLogger = LoggerBuf.create(loggerBufP);2 G4 Q, r2 @2 p' \5 ~3 b
appLogger.instance.name = "AppLog_Core1";
3 O1 B! y0 h1 g8 I7 G6 j' v# uDefaults.common$.logger = appLogger;
/ U8 z, ^* T' {, H. N+ WMemory.defaultHeapSize = 0x8192;    2 W+ w! I% T+ x' h& Y% l& k
Idle.idleFxns[0] = "&LEDStatus";8 {% `  b2 S7 v  Y: N7 \/ x2 q
Cache.initSize.l2Size = Cache.L2Size_32K;
" X$ J3 R1 K. B' k9 W* T6 B/ p
3 V' W  s/ P# P; f
回复 支持 反对

使用道具 举报

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 */
* @' V0 l6 h, ]& G* Kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
* q2 R- G4 e+ X9 svar heapMemParams = new HeapMem.Params();
2 h$ t4 x8 z3 U( ?) r' B( Y  b# jheapMemParams.size = 0x4000;/ t& e& `# E* \0 V
9 G1 v/ H) J  w% M, w7 V5 ^/ ?
var Memory = xdc.useModule('xdc.runtime.Memory');6 n" D' ~. p# v3 D4 t8 n
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
/ y4 \) c/ r9 _3 }- i" e
' H% d0 U1 u6 r) L  q我大约calloc  每次共计大小为5K*16bits,7 v% K; G3 a1 |2 M* L
而默认配置才0x4000、需要改大。
2 b9 d( v; ?" j; \$ }4 N. \4 R% I. R4 L- `4 ?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
4 F  d; u# D3 U* ~3 r. eProgram.heap = 0;* u6 R+ B2 D1 f6 G" Z
Program.argSize = 100;  /* minimum size */( ?1 q  x* C0 w1 q
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-10 08:54 , Processed in 0.043944 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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