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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
  I- q$ k! L  G. b) W: D  V$ w# _5 M+ p' i
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256/ _( W, Q! N$ b# `  Q
! f% J; ~4 G. u" P( t+ Z, s- s
其他程序段。。。。。
  ^; I& i6 R; P* o8 y# M : r( Z4 }* Q0 N
   free(x_d);
6 t+ f# W1 U& M1 ~4 z: J+ {* }" @3 V6 y# N/ S2 ?9 t
使用DSP侧单独调试功能,验证动态申请没有问题,
$ H- f! L; o0 r" y" E
5 `7 Q" \# ^/ l- F但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
- h$ X9 Z5 L# S. e1 Z( ^

! _: X+ r/ @2 C& L6 Y/ R, H  g% y+ w) L3 g
  T% _8 X  y! W; s+ M
' x( V( \: X$ o- |4 A' ~. |, G
/ d+ d, a! [8 i1 g
8 m) d5 p2 F/ G! B

; y; y# o, _) H" ]6 U% V0 P% n
7 P7 g& D1 E3 Z5 i: `( Y* f! Y  A1 G; ~
( m: _1 E  i# R* H6 A1 E, J  R
分享到:  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 */' ^& d+ k" i9 L. k) U- f
Program.heap = 0;
  y' z/ ^) _  a' rProgram.argSize = 100;  /* minimum size */4 n+ j# t+ n, g: ]+ t
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */, X! o, y  f# |: W5 {7 ^3 m
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
# k( a- g& ?' K. g, A1 svar heapMemParams = new HeapMem.Params();
* }* u( B) c9 s) cheapMemParams.size = 0x4000;3 l. }/ H8 D$ m" z# g9 V: q( J

. Q, E) u5 g& K5 Y) e7 y7 ?var Memory = xdc.useModule('xdc.runtime.Memory');' t8 S! ^+ Y. U0 w0 P9 H: ~
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
* ^' X* O, T8 N) K# L6 X: Q2 I* r8 J5 S1 H+ {5 C$ T4 T* Z
我大约calloc  每次共计大小为5K*16bits,
: W/ J2 k4 e- P3 U: H  b4 U而默认配置才0x4000、需要改大。
5 q! s& N2 x" T) I) B; }
6 B/ j4 B4 \1 R/ y0 D5 t
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明: s' \) F% K9 T/ p; g( M4 I9 O; V5 F* y
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下; ^8 m! I! V) g- o1 Z
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)4 W8 J) u3 w! ]+ o: ?

9 L9 ~( w# d" A& A3 w是不是需要在DSP.CFG中进行配置* U  X' |+ f& c& N3 R4 x$ `
我现在的配置为
( }1 F9 H5 h) P) a1 T
. Q% I9 d0 V+ t* ?/ h4 t' P0 `/*, `/ v0 A" ^8 c3 ]; |5 ?& L
*  ======== Operating System Configuration ========
4 H- e$ p: a1 D */' s$ Y5 q) d( `" f0 K+ N

0 ?& U3 d2 E% Q$ t; Y8 B/* no rts heap */; _2 `* ]- ~4 `- |& l
Program.heap = 0;8 C; f1 F1 q) h+ S
Program.argSize = 100;  /* minimum size */
$ {* |; \3 N# w6 c0 TProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
$ `' p2 R" g6 f
" B' N; z& B2 t) U) N/* create a default heap */
3 `. H4 {7 j$ o* `; E1 I" m$ Avar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. a. a0 ^( p" ~
var heapMemParams = new HeapMem.Params();" o- K+ s  z1 }" B  b, Z
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
" N- o: {2 j. k7 T, j- e  q
9 \- W" ~2 ]# B* w. O/ Y
var Memory = xdc.useModule('xdc.runtime.Memory');7 S& \% J1 |* n6 P: |8 x. k
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);4 x3 H0 b/ X  J
$ S+ S/ M8 |5 n+ F4 N
/* configure System module */. A4 x+ A& B$ k* \- v* ^- z( F
var SysMin = xdc.useModule('xdc.runtime.SysMin');
! c8 C( [/ b) F. ^SysMin.bufSize = 0x1000;
  W7 b+ ^  P2 t0 U6 p4 Z* |( V: b; vSysMin.flushAtExit = false;9 x* V7 e7 r8 a( Z8 p" W' M
' w" Q8 ^2 v$ ?* f: a
var System = xdc.useModule('xdc.runtime.System');: s* c4 |3 j5 k7 n+ R6 {- E
System.SupportProxy = SysMin;& f& v# q" r# V. H3 u

5 L0 ]$ K1 b8 b9 O5 T) p/* configure SysBios to use the lower half of Timer 1 */9 i% t1 c' q% j5 a7 J& J2 U1 r
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
/ R* _# X$ T2 p+ e1 U. pvar Clock = xdc.useModule('ti.sysbios.knl.Clock');& `7 Z' l! k0 w# `
Timer.timerSettings[1].master = true;  h$ ?# }$ J% B0 |' S" s5 [
Timer.defaultHalf = Timer.Half_LOWER;- c- M5 r5 q2 P* M
Clock.timerId = 1;0 b9 T$ R% K5 g- l" y0 G
3 N; R# n$ L. C% _8 ~1 W* p  Q7 }

# O7 b, M! p6 p) o4 n9 ?! o/*' ]2 S" _% a8 u2 i8 _
*  ======== Miscellaneous Configuration ========1 k0 s3 A) g2 w* ^
*/
( C- {" f1 D- \& Q; S8 d
0 O) x$ Z$ h+ `4 x: U" Q* X; E5 v/* set default diags mask */0 \- _; R) ?/ r, [
var Diags = xdc.useModule('xdc.runtime.Diags');
! S: ~3 m: g, H. r- h! Qvar Defaults = xdc.useModule('xdc.runtime.Defaults');
3 P% D2 D' {5 t1 S) K! H2 y) g) K6 r1 D/ [. Y! W/ V$ }
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
4 s+ k9 f$ U+ w# e5 N& V1 TDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
  i1 [6 R; i# D1 R% c( |Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
. O* B. ]% n1 ~Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
' ?/ z7 M4 q2 T2 \3 G; j- wDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */7 Z# g' z% x% ?; }
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
. \3 F/ S% a& f4 FDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
! U& {" Q$ b) o5 n9 A5 b' d8 e) U! bDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;0 K6 t4 ]3 u! Y' i: y0 G2 |
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;( X& }) _( ^- f7 a: _+ B
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;$ n8 M8 ^3 y7 a. w
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
+ c  O% A) U" J/ S& jDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;  x( p* t2 o+ U0 z- ?8 ?
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;  _7 W3 p6 N- j, m/ F3 b- }
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;: z& l% @# b! [

; I6 i0 V; F0 i! Q1 W9 E8 m/* override diags mask for selected modules */7 f4 Q4 Q4 W  P) V' |! C
xdc.useModule('xdc.runtime.Main');
: D! n. M) C$ TDiags.setMaskMeta() B7 E' ~- p" z: r6 D8 W8 g" b
    "xdc.runtime.Main",
/ g' _0 z$ w) O3 Z/ q2 a    Diags.ENTRY | Diags.EXIT | Diags.INFO,
" f* V2 N" _/ ^8 @& }4 P/ p    Diags.RUNTIME_ON
: V% G5 A/ E7 Q);
  Z, N" {* R/ ^6 p4 k
. ^" o! i& w4 m* }var Registry = xdc.useModule('xdc.runtime.Registry');: ~4 v+ W2 z: i1 ]" l
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;3 N1 R: A& _$ a3 d5 q4 k6 H, E
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;+ C2 U+ H# M. z
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
1 ]( S% O3 _1 Z* M- _+ R6 Y3 }* l4 WRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
" ^0 M, V' A* D9 O! v& r" i( Z. Z
/* create a logger instance */
: B  ?  P  ]# G& v+ }+ Q- ?( pvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
1 r* [0 v6 X2 g9 {( Qvar loggerBufP = new LoggerBuf.Params();
4 ]# F+ {8 N5 J0 e" P& ~9 VloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */0 Y; p2 V, x& \  F
loggerBufP.bufType = LoggerBuf.BufType_FIXED;/ m# U$ l$ s+ E0 [7 q  ^
" I- ]% x8 L) {/ L7 Q! ^& N
var appLogger = LoggerBuf.create(loggerBufP);7 t( W& x% n" F) j1 ^* y0 e
appLogger.instance.name = "AppLog_Core1";
9 [0 x  c1 K0 V6 J6 z1 `5 pDefaults.common$.logger = appLogger;4 @' Q5 Y( \- m6 V' N  [5 M- D
Memory.defaultHeapSize = 0x8192;   
+ b% Q; ]% ^- y# }4 Q# Q* Z' P6 I6 z* F* LIdle.idleFxns[0] = "&LEDStatus";1 Q: k2 ]# D* x9 l' {
Cache.initSize.l2Size = Cache.L2Size_32K;
# e5 B+ N3 t, p) _4 E7 x! r# x- w+ D* ~* j" q/ h9 I
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-24 18:49 , Processed in 0.042498 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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