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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
  v  l5 Z' q# |. F# A4 d; f/ P& t
: R" N( U7 Z# c; \' [9 G    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
9 m& e% v: B+ l. G. \/ y. q! m0 l0 S; x+ U3 H& {0 u
其他程序段。。。。。+ D' W9 \0 R' w; y

. f! N" Y/ L  x8 l: ?   free(x_d);  l7 z" D8 E/ a8 B. [

7 A) w- W. u  T5 k使用DSP侧单独调试功能,验证动态申请没有问题,/ R) J/ W5 i# ]( Z2 C+ m+ z: B

# u1 _( G' B! l9 c( n+ g7 U9 ]& y但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
* E  ~: b$ E5 L, ]3 O

1 n1 f; F  W: W1 p. `' s% j. L4 J8 T  B: ?1 j8 b3 Q8 e
2 s  k, ?: y7 M4 Y

- }0 Z* U3 A0 j$ s- U, R* Y! U7 N2 }3 j
: w# e7 L& G: J

6 Y( I) z( }0 U9 |! C/ `& i1 d9 U7 N2 |. I; x  G+ e

8 T, q. x+ T# n; h8 [
: _* B' y; x3 y$ Z
分享到:  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 */
# ^- ~, v& V. F+ X) A' w9 ^" k* F) gProgram.heap = 0;
* `: h7 |6 j/ r& @: f- {Program.argSize = 100;  /* minimum size */) @  A! I. g1 Y& ]1 _$ z# Q
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */0 X5 d( X( u! e3 Z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* C2 Y# u; L5 J% \/ |" o
var heapMemParams = new HeapMem.Params();
* `+ C* ]& I, V! a( [heapMemParams.size = 0x4000;: \5 |0 o, i' S4 O

" J% Y& Z$ w0 u/ pvar Memory = xdc.useModule('xdc.runtime.Memory');
& w% B* W, V/ G* FMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
, f) g: q6 M+ d: Q8 j" w5 @5 ^  [3 C- ]- o
我大约calloc  每次共计大小为5K*16bits,
! Z0 E' s+ Q$ g6 X- E' o5 _/ Z而默认配置才0x4000、需要改大。
1 y. \# I  D+ d; A. l0 l
% S; R" ?! [0 v0 K2 e" Z
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
1 H7 q* N% n' Z/ M/ Y; n4 Y我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下1 \+ C+ [: ~1 I9 G& K+ [
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)' D) D4 V& Y( y! d1 {) c* m
  V+ r# L- o3 O2 e# d1 F
是不是需要在DSP.CFG中进行配置
1 z5 ?. R% m/ I5 `% n$ T我现在的配置为
0 Z7 w4 P' W( V
& S: q9 o9 w  _* ]" j. n8 q/*9 U- N1 j$ P1 }
*  ======== Operating System Configuration ========
5 r2 @% r) ~) j */
3 W0 c- x, Z4 ^  U% p8 t7 L, f" o6 h& @
/* no rts heap */
, o# P, v$ X# NProgram.heap = 0;
, t, c$ f# k8 c0 \  o; OProgram.argSize = 100;  /* minimum size */4 z0 z  |- ~6 U  A
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大, Z" Z, |& H8 C4 x. q" E6 F! P2 ]5 Y7 j

. N$ A; ]" M' H) ]9 g9 F/* create a default heap */
* x6 z1 e6 O3 t6 g, L& O3 xvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 P1 _% [5 u2 y* K3 n1 ]6 ivar heapMemParams = new HeapMem.Params();* ?" M5 C0 H- P& y7 Q
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大8 m8 i, z% B9 F) [: E; g

0 Q! I. F( ^7 B+ Y7 W4 T
var Memory = xdc.useModule('xdc.runtime.Memory');! ^, }. n7 g8 f* v0 c$ Y# z% _: F
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);$ F, r3 n0 ~$ n

! t6 M) B% M, E/* configure System module */, y! V! G. h2 o, W/ A% @
var SysMin = xdc.useModule('xdc.runtime.SysMin');
5 h: l- z' \8 z3 j/ VSysMin.bufSize = 0x1000;
  y, E. F4 g; K0 ISysMin.flushAtExit = false;. w- i& A; a) S. u
4 q7 D' V% ?. v) z: b: J. Z
var System = xdc.useModule('xdc.runtime.System');
2 X$ I8 A  G' |; {  x1 KSystem.SupportProxy = SysMin;
8 v/ c* J2 g8 G1 u( b/ h7 _" s! c% Z& m7 L* M3 l' D
/* configure SysBios to use the lower half of Timer 1 */4 a8 c% h/ v. G5 u: M
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');# V- V& a/ x) A5 w3 @% Z0 d7 V
var Clock = xdc.useModule('ti.sysbios.knl.Clock');) U! ]" U$ B' r  B$ L
Timer.timerSettings[1].master = true;. f1 P, ]: o7 ^3 y8 I" h0 Q
Timer.defaultHalf = Timer.Half_LOWER;
1 d: R9 m+ l8 l9 s4 eClock.timerId = 1;* {+ k% _* P' ~7 j

+ O$ B# Y+ Q" b+ y$ t  o) e& Y4 I/ v' d$ i1 ~( Q* u9 R6 `3 L. E
/*5 }3 h% Y: _0 V: e; P
*  ======== Miscellaneous Configuration ========; R8 t5 v8 N* t0 _) G) r& T
*/
: S5 y% D* H7 G7 D* l/ E
4 s. f) [$ K, `/* set default diags mask */  W( m% I3 S0 V) t
var Diags = xdc.useModule('xdc.runtime.Diags');* q8 z( ]+ }) X4 b
var Defaults = xdc.useModule('xdc.runtime.Defaults');
2 T, Z: z  d6 i6 c8 o& t2 N8 u2 y  `; r$ {+ R* _
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;, ~7 p% o( q7 s5 D- w0 P
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
. \: A6 Q! Z7 n) @9 _Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;0 d% {* ]4 w$ N) B  N+ Q7 G) z$ a
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts *// Q  _* x5 P$ S( ~( F
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */: u+ j+ t8 g2 J# j8 c3 A. M8 I
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;; @$ Y9 `. P4 F+ a- w! A1 A  D. D. w. L
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;6 U1 ?1 G' t; ]3 N+ q
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
' M. [+ q; N: {5 G% t- ^% tDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
: e& Y; v$ _7 vDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
0 K, v* x! j, yDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;1 |0 T4 ]0 q, _
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;9 P' l& C! J/ I6 O& L7 o
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;% R3 d9 l3 {' R7 S
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;5 q+ k! ?& }& ~. A5 v! I
! G  v/ o: \- |; B- ]! `
/* override diags mask for selected modules */
) b4 @# ^3 r  @4 @/ I# Q1 H5 bxdc.useModule('xdc.runtime.Main');
" ^6 p6 P) }4 }( p( `Diags.setMaskMeta(. l+ ~- D# @/ z, L
    "xdc.runtime.Main",
* A' O' @3 u: i# f. ?7 B    Diags.ENTRY | Diags.EXIT | Diags.INFO,
; {, g  B; }  X; K# ]( l$ p    Diags.RUNTIME_ON
' v! {% l7 x& h);: a" }6 S3 X9 W3 H' |" Z1 N1 _

! m& ?/ g0 E7 @( G- g; b( Cvar Registry = xdc.useModule('xdc.runtime.Registry');5 L9 ]' ^. A% D( E& Z3 `
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;/ T7 t  [% ]6 V: N+ |: s
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
3 o3 l3 T- q; H5 bRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
) n: _; R9 \! _; ]& f) ?  }: M) HRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
0 T% C" H; }. y: z! V; |6 J) r
5 I. o7 ?9 j$ b& ^/* create a logger instance */
! ^1 l) D# M* e. Tvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
+ D4 n" F8 b9 j. Jvar loggerBufP = new LoggerBuf.Params();
2 P! i6 L( Q& y( XloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */, l9 \; q8 Y* b: l
loggerBufP.bufType = LoggerBuf.BufType_FIXED;+ z' o9 Y4 J; L: y0 J5 p
  l# X! |0 A- Y" u0 z0 \/ h3 g
var appLogger = LoggerBuf.create(loggerBufP);! e$ C/ v' ~  u: Q! d
appLogger.instance.name = "AppLog_Core1";
* U# {* B3 z* fDefaults.common$.logger = appLogger;( _3 r" e1 ^) Q
Memory.defaultHeapSize = 0x8192;    + z/ ]$ |; d1 d' w; J, ]
Idle.idleFxns[0] = "&LEDStatus";5 U7 f% g# E  _  z! j
Cache.initSize.l2Size = Cache.L2Size_32K;3 B7 z) c& r$ d' X
, k2 r: C1 w9 ^' X: K5 X$ z1 b+ b
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-20 01:15 , Processed in 0.042479 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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