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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
4 D% l/ w4 L6 }, I
; k8 s  O4 q8 m1 t3 }; m    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256) T% k2 j& A% r' Z; P" l

( l4 x& O  V9 T5 s' S% R; o1 E0 k其他程序段。。。。。+ k9 L! Y5 f: [$ C6 [
& D3 @3 o5 S: K1 `( q8 W* \
   free(x_d);% s+ O3 Z( |  J1 E' E
$ ]) S1 f& V7 b) L) B& L- p
使用DSP侧单独调试功能,验证动态申请没有问题,
7 }" x/ g, ]( W2 I: l/ q: R5 M( n) t8 j
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
  y0 W9 |& q3 n& V: J
0 z* m7 Z# W4 y

! n0 H0 ]+ w% k% c! U7 Q! g0 M
% y# L- E& k- S  g- L8 L( j, ^/ n0 G' D/ v: u$ o7 R
* U7 }& M  X; W6 i" U2 v4 s

' Q1 A# m  R% @
/ |6 u# m( w6 b- T" h. H2 s9 _; I5 _( s9 {; ~+ O
( ^1 Z+ ~+ `$ z" ~, B* y8 v

3 a. d3 c, O+ x9 _" p5 v! \, O% t
分享到:  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 */
; N. E& H  D- Y9 H7 x! @Program.heap = 0;4 s2 C  j* b: h
Program.argSize = 100;  /* minimum size */! ^- N: K/ ]4 B* C4 L
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */) T: s: [" Z6 l* b8 L
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 O- R5 m2 x1 D- y0 I4 s
var heapMemParams = new HeapMem.Params();
4 l. c: g2 z1 @) @heapMemParams.size = 0x4000;6 {) C$ U  E8 p, w% @4 F

2 g3 n( U0 j; D. R4 C. gvar Memory = xdc.useModule('xdc.runtime.Memory');2 m* C7 g1 @- o, t+ d' v
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ W, J. d- z& q8 S9 S
  U5 L6 Q; S3 A$ i我大约calloc  每次共计大小为5K*16bits,2 R  U4 [9 p7 f! j$ X! Z
而默认配置才0x4000、需要改大。
" o$ k+ `0 [* ?! Q  ?& \, p% B% O6 s- |8 N5 }, b7 p! N' J
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
* o- g2 o0 ^8 J: g& J我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下, u' a6 u& i8 {# {: f
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)$ x0 R% C; p1 |
$ m& x6 L" N/ s  Y- n+ d
是不是需要在DSP.CFG中进行配置# g3 K( X6 ?  U  F. R& V+ D
我现在的配置为6 W- A: O; v5 g' N3 g

9 Q2 A5 M7 i: V) ~7 M/ v/*
4 E$ [9 g. j6 Z( U! W- w- K *  ======== Operating System Configuration ========
# o5 L) Q  s' {$ S% _  l */7 J5 A7 }9 I- z5 ?% C6 C) K: I8 Y

' b  B/ m: m3 K) f. @/* no rts heap */9 }9 O1 V1 B  Z% a" G
Program.heap = 0;
* `& j. {8 j: g: n6 ]Program.argSize = 100;  /* minimum size */
' ]" w# s! b7 F% X3 [6 y* NProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
& \8 \1 H$ b7 _0 H+ u* s! C/ n" q
3 C: r7 J. C7 x" G- T) K5 y/* create a default heap */
/ X$ _, i- A! ~# f/ H* Qvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');$ A# V' U* |2 V3 F* O8 W4 K6 e
var heapMemParams = new HeapMem.Params();
$ |2 u: ]9 T: D6 Y, RheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大* r1 R9 i2 q" C. P0 [

) t4 h) m, d: C, f* \+ k8 a9 R6 E
var Memory = xdc.useModule('xdc.runtime.Memory');
; P: ]' w: u; [9 a& FMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
, A% w$ b" ?; K- l+ j
9 p, b6 \/ B/ ~# S/* configure System module */4 _4 {7 Q. u) ?8 o) g
var SysMin = xdc.useModule('xdc.runtime.SysMin');
2 g, C1 }5 I+ C% ?) s: w  H. o$ ]SysMin.bufSize = 0x1000;
: F5 V5 O1 P: |1 I- SSysMin.flushAtExit = false;2 {* N; h- P- b" \2 w

7 [$ g0 ^. Y- s8 K, cvar System = xdc.useModule('xdc.runtime.System');+ ^$ a* g$ b: o' ~* B! s" K& W
System.SupportProxy = SysMin;
9 o! d$ e, U: j& Y
1 U. _* `" f0 u( L' o, d1 ~, w/* configure SysBios to use the lower half of Timer 1 */
! O% h7 V* \; S; Y0 }' jvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');- R7 C+ X% a: F3 C0 \; M3 ^
var Clock = xdc.useModule('ti.sysbios.knl.Clock');9 T* ~/ r, }+ p8 K/ {$ L! I
Timer.timerSettings[1].master = true;
6 ^# X" E% g- I: K& mTimer.defaultHalf = Timer.Half_LOWER;
3 o2 t6 L2 Z% t& R& PClock.timerId = 1;
2 \( u+ P) n/ `5 S/ K' J/ d; o. E% {2 S2 G# r
9 R3 B+ [2 f5 d1 N( h6 \
/*3 X: \, N4 A! N
*  ======== Miscellaneous Configuration ========
; ~' x  G7 F- K */
6 `; M  r+ Y0 d# u6 E$ Y4 d: Z: d- O
/* set default diags mask */' ^2 a" c$ z9 a& L; c
var Diags = xdc.useModule('xdc.runtime.Diags');- _* H$ |/ ?% f* k
var Defaults = xdc.useModule('xdc.runtime.Defaults');
1 Q$ c. D& }2 D& ^( [/ L1 |& r# Q
; U3 j2 W! w+ k8 o# \2 @2 mDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;4 m# b2 Z( z8 Y* b6 M+ w- i
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
2 z, g% V/ d' e& }# i* B$ SDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;3 `4 V- e6 O$ J" J4 x2 T
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
  P) H' o$ b, M' ^1 S9 BDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
, p, J7 p, q8 |" lDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
- t( v% O+ P8 y) P, hDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
- h' I. ?' B4 B8 u  Y8 cDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
6 V& R4 u* _8 D. S; x+ a. @+ FDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;7 _0 A7 e9 X0 _$ Z* Y2 d5 r
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;0 U$ z7 p+ j$ J- K' n$ P- H
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;: C0 M" k6 \3 k, n
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
5 U+ F0 [% u  W& B% M, P! ?5 IDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;+ s7 O' D0 u! D  ]8 W. o5 q: B
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;9 a! M& u3 \6 m" r) `' P! Y
2 X5 [7 A) d. V+ O+ O3 P
/* override diags mask for selected modules */
; Z( Z) R+ I4 E" [6 o8 }xdc.useModule('xdc.runtime.Main');2 S5 Z) q5 f. @; x5 p; ?
Diags.setMaskMeta($ t% N/ {0 d# w- h5 I9 t4 g7 `
    "xdc.runtime.Main",; |1 g& z8 M# b$ Q7 J: U
    Diags.ENTRY | Diags.EXIT | Diags.INFO,3 x+ h; x# u: w! Y2 s
    Diags.RUNTIME_ON& e3 R1 u3 C! {* [6 @
);
0 i9 n$ _* m7 L& g: R) z/ L& H$ T8 D5 w3 o+ G" l* F1 S. g  W
var Registry = xdc.useModule('xdc.runtime.Registry');
& P4 w* D! k5 {/ fRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;) ^- ?) }# b$ E
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
$ |" h" w' W3 n/ o$ B: DRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;, D, h& Z$ T+ t6 w
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;7 P- ?1 `6 i9 t+ z
8 h- q# a9 x# J9 J4 V% ]) m
/* create a logger instance */1 S  e7 }* B% {2 |7 u4 w. E
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
. K9 Y$ O6 ^( d9 w! G& gvar loggerBufP = new LoggerBuf.Params();+ h8 Q/ G" N! }* Y$ D
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
2 l9 K% h- b, r$ ~6 f# P9 L0 v9 FloggerBufP.bufType = LoggerBuf.BufType_FIXED;1 P+ Q( x# j9 A6 J( w7 |- I' d
* d' m, Q2 q9 U# ]2 ]# ?
var appLogger = LoggerBuf.create(loggerBufP);
5 a0 T$ t% }8 Z1 `! BappLogger.instance.name = "AppLog_Core1";
, q1 M7 ^' q( w3 v0 ?4 D* xDefaults.common$.logger = appLogger;  }0 o# e$ {3 a- C- L4 n
Memory.defaultHeapSize = 0x8192;   
% c1 `2 r( R9 \$ f# zIdle.idleFxns[0] = "&LEDStatus";
/ l9 f( Y) K5 X, i$ f* UCache.initSize.l2Size = Cache.L2Size_32K;
1 G: t( n1 k9 `3 Y
3 ~4 j5 y1 ~# R+ J% G
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-27 19:05 , Processed in 0.047579 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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