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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构: z. p! e# i- }' c  Z/ F9 T
, C1 I3 I4 u* P- F* U: t
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
7 @- y& v; ?. k$ R- x" m* @& q4 P8 U! C, }
其他程序段。。。。。
* I8 p# R/ Y) V! v, ^ 2 Q+ m8 {& B0 X
   free(x_d);0 e. K; G! Z3 |  M) a

5 t3 [& ~1 |2 A5 V+ V使用DSP侧单独调试功能,验证动态申请没有问题,
8 b. z; {, ^, J9 V( J0 G
  a5 X9 t! t- v但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。4 N8 f9 G  q; ?/ H# ]
: D1 [8 {8 Q. J$ j+ y0 z

$ L" O+ V, p5 B& ~: C3 X  `2 s4 f: }" S% ]$ n

. F7 z! z' V1 d& ]' ]1 u! N! ~& g' F9 d7 F0 G2 t; _  S' _
  I# E0 s& O5 O: t9 N: P) C. J" V

: b7 \0 p' I% N2 L" \" ~, D1 f( h( A
9 U0 H! e# W6 B; F" p$ D
5 ^* K( A! q2 C; \' t$ S: h4 t
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明) }/ C0 `% H& T2 z) f
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下' i' V) c! R$ T7 e% i! A
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)2 M$ |4 w) S  S9 r) |! s6 e

0 j& U  Q6 B$ ]是不是需要在DSP.CFG中进行配置
) P) m0 t" _+ \我现在的配置为6 H, X( A+ U! ~- S0 \

. V* `- W' p) [& g: P1 ^5 Q/*
& T) v* ]3 G( P# g *  ======== Operating System Configuration ========
3 t+ E& ^# I7 A# u# K, X1 i */: H5 ]0 K# w/ M% K

1 J' ]0 ]7 }5 P  W& M# Q" \/* no rts heap */6 L5 g9 i* j) Y8 b0 P8 }
Program.heap = 0;
$ m# Z/ u7 R" j# KProgram.argSize = 100;  /* minimum size */! b. q. c* R5 P* p. m
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
" h2 ^3 V. S) {. I6 o; l
0 g4 h4 C; n/ ^8 ^; |  |4 E+ I# }5 X/* create a default heap */" A' F( h! P8 n* f5 z- ?
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% ~( d9 y+ a6 `$ F$ F
var heapMemParams = new HeapMem.Params();
! h1 k/ V4 G* d/ l! fheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
+ Z! V' X$ K& O8 v: E$ I: _. M' o: @* n8 `8 F' w: [
var Memory = xdc.useModule('xdc.runtime.Memory');4 u$ Z  d" {) e, Q2 x
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
" }. M& D3 {& s3 l; q' l2 z' H" t& z# H- A4 q: t
/* configure System module */5 \$ k. o% [3 o: P
var SysMin = xdc.useModule('xdc.runtime.SysMin');
# v* r: _  s- USysMin.bufSize = 0x1000;
/ `% ^9 Z6 Y' {6 S; L# a% B9 fSysMin.flushAtExit = false;' w8 j1 i. Q8 Q4 A! \

+ w3 n4 H3 B# c9 P. wvar System = xdc.useModule('xdc.runtime.System');- f2 |1 W. \8 j- ^; P9 s
System.SupportProxy = SysMin;, H! y2 ~9 X4 C1 ~( J' r8 y$ o
" t/ M6 `5 S, J9 M
/* configure SysBios to use the lower half of Timer 1 */2 s. k+ ?5 |" Q$ B2 Y* P# H4 X2 D/ Y
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
( z; ^, a3 u4 m% @% S6 \var Clock = xdc.useModule('ti.sysbios.knl.Clock');1 {, p* }! x5 O1 O' m
Timer.timerSettings[1].master = true;
5 P$ n3 o2 u, N& Z" Q3 h$ @( A- @" LTimer.defaultHalf = Timer.Half_LOWER;
' P  N# j( v! z$ r' y) z# k1 K' {Clock.timerId = 1;
6 z" p  i9 `8 [1 U; T! r. T: r* _2 E
# _$ i& O& n! H' V2 k; w" R, _) G( @: c2 w+ a6 ]! u, U
/*3 `5 n* y( o! _% G$ |) x' }
*  ======== Miscellaneous Configuration ========3 G1 F8 w& v; \- a
*/9 m8 y7 v3 g2 T8 A6 @/ B# F4 z

. s: w9 ]7 f0 b; Y: T' m  b4 U" T- g" y/* set default diags mask */
1 |% H  ?2 J0 x9 ivar Diags = xdc.useModule('xdc.runtime.Diags');
  |4 f+ {: ~. u5 }var Defaults = xdc.useModule('xdc.runtime.Defaults');
, {* k) _0 \( i; D, X
- m$ q/ n' v" X( cDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;5 t+ u" ^8 i, z* J
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
# B$ }2 x% G8 v( n7 g  kDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
+ M1 H" W5 g% y9 m# C" \. ~Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */7 L3 T+ t3 f' q  K% q8 L
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */7 C" b$ M2 f8 z5 A3 R$ P! x' z
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
& Y9 M/ p& I) ZDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;$ t/ b4 Q9 [' }* T1 ]
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
9 Y. S& l3 e6 D: CDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;* @9 _$ T2 P. p: d! q1 y
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
% q: y4 E' K9 i# K- HDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
5 q2 M% l2 H8 v9 h- J3 |8 Z  ODefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;4 V4 q3 }" C2 L9 n# ~1 \; l; @' W) c
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;  b5 ?$ g+ K; i* h- r0 i) C
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
% R2 J# a5 W- q# G6 U* V8 a1 K$ l! c! ~) s$ s
/* override diags mask for selected modules */0 a1 X5 R8 \0 l2 q" |- m3 W: U
xdc.useModule('xdc.runtime.Main');
8 p0 g8 Q. ~1 z# j. ^Diags.setMaskMeta(/ U9 f. A/ C; Y# d" m+ K$ ?2 }+ i
    "xdc.runtime.Main",2 v  x$ r0 ~% o
    Diags.ENTRY | Diags.EXIT | Diags.INFO,2 W/ r8 R4 X7 G2 y7 H; s0 T) t
    Diags.RUNTIME_ON
- }4 l$ z- ^8 K);
1 @$ ~0 I7 Y6 r1 o3 J$ o' g; |' t. V( Y. a3 ^
var Registry = xdc.useModule('xdc.runtime.Registry');  a3 X8 ~* M2 Z; A
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
0 H( O: Q* d7 |( `  sRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
8 T0 k7 z3 b2 m  [8 HRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
. {# [; o* \$ B! SRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
' I! D* J) D8 l4 p- R1 h4 e$ `/ ]8 @1 m6 d8 x3 L" j+ w6 R- Y% [
/* create a logger instance */
- V5 Q2 s3 v2 d+ t( Fvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');  |' D+ G7 i. U! T0 B' ]
var loggerBufP = new LoggerBuf.Params();( V7 w1 ~# [4 B
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */2 C9 b0 t, s; |: ~$ m! i
loggerBufP.bufType = LoggerBuf.BufType_FIXED;* a0 u# O- n- E& w: F

# I' T8 o' c0 W; T. n4 Q9 A# Evar appLogger = LoggerBuf.create(loggerBufP);" v1 q: O% p2 o: P
appLogger.instance.name = "AppLog_Core1";
5 P/ `3 F& Y0 N9 LDefaults.common$.logger = appLogger;0 n# ?4 L. e6 L
Memory.defaultHeapSize = 0x8192;    3 k/ H) A, ~' E- E) y( C. O
Idle.idleFxns[0] = "&LEDStatus";4 i, b% R5 p& u7 I! z. l
Cache.initSize.l2Size = Cache.L2Size_32K;
+ N  |4 r9 j/ a  S7 l/ n, M& m- S3 _, L
回复 支持 反对

使用道具 举报

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 */
( V/ @+ T( D0 ]' |" _. l9 Hvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
# Z: P7 j4 q" c1 ^6 _var heapMemParams = new HeapMem.Params();  }, x# ^% i% W2 a9 s# e
heapMemParams.size = 0x4000;
9 O* z$ J* b5 x4 I( r
* l$ e5 T% j  A" o7 ]var Memory = xdc.useModule('xdc.runtime.Memory');& O2 N6 r" g6 w( H: F+ @# A
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
- Y( s& {* e1 t, D
% T( T5 S2 b. b% g, A0 W我大约calloc  每次共计大小为5K*16bits,
% t! f1 s) E  z4 n, a* [( C  E而默认配置才0x4000、需要改大。
, q  L: v9 Z& j3 F1 ~! c  m- U, d
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
7 d1 c4 L5 t& sProgram.heap = 0;* v/ Y+ D, g3 K5 z* I! K
Program.argSize = 100;  /* minimum size */! N, s1 f% h3 K1 g
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-12 02:45 , Processed in 0.054121 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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