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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
5 l3 h+ J4 d2 ]# V
5 }0 l. L) l1 }' X, U    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
# G1 ]; a' `$ c- s6 h$ W  C- f, R1 t5 [* j: @4 W
其他程序段。。。。。, M4 s4 z* E0 D3 g$ U5 k4 i& D1 D
2 F# o9 d: d$ w+ M. |1 H
   free(x_d);; k+ H! B, \6 N. t0 l" N

% `# R( a0 H1 z7 V" x$ g/ _使用DSP侧单独调试功能,验证动态申请没有问题,
7 r, C4 C$ P$ R1 U7 T* P* g3 G8 D9 b0 J) b) v  i* A
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。: m. E( D8 }" ]

; D/ |0 \6 \% b) r  O0 F" @- u# f1 f7 w( M8 v( g( e) K9 G

% E$ \( L& ?  K7 T1 U) X2 ^, g; }
1 f1 d2 S0 h0 x. m" O' f4 X6 \: k% o3 |/ i3 p

; ~: l" w# `# C) E  x0 r% ]1 Y, F4 w& u% R( r
1 a+ p9 A! w4 c2 e4 g
7 B0 ?& W  R4 B! @2 Y5 q  C
9 R. k! ]  q4 I2 t7 B
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
: g; ?- `, T$ e我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
4 R5 x  g; q' T! s(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
; v+ b% f& S1 z. Z* q. Z" `& V

3 X. t* E# s; {9 O# q+ o是不是需要在DSP.CFG中进行配置
, v4 h) ^8 }! c% `0 `+ t" {; B我现在的配置为
5 x7 R( R! [7 e8 ]% y6 M; J& H) i
6 T* a6 Y6 f2 Q2 E; K9 d/*( s2 H" v. _% t$ |
*  ======== Operating System Configuration ========
  c: u- \# g. ^) I& Q+ g1 g */! f/ i6 K3 P- a; d

- H) a3 R' p4 s. X/* no rts heap */0 t. E% Z7 Z7 e" A/ p
Program.heap = 0;. A0 D' b$ N. p. m
Program.argSize = 100;  /* minimum size */1 [1 y& t" E- l/ Y8 z  J9 h
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大- k. O& O$ V1 E0 s
' @% F' O2 q8 P
/* create a default heap */
& l: O" y" \6 n) r' qvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ g, ]# W9 H3 O8 B% ?, B! H
var heapMemParams = new HeapMem.Params();, a# R9 y  b: b$ j0 N8 R- O
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
$ d2 N9 f5 g& s3 C% n; u
( u* n6 H- \' h, `
var Memory = xdc.useModule('xdc.runtime.Memory');
! z% z2 l. K/ j1 n' K" x0 hMemory.defaultHeapInstance = HeapMem.create(heapMemParams);* `5 v1 ^( b* d( k! i

8 a: A1 }3 Q* h. P6 q) P' V/ \& p4 g/* configure System module */3 M0 w; o  b8 D* ~/ Y6 h
var SysMin = xdc.useModule('xdc.runtime.SysMin');
9 S5 x% P; s' L+ i+ TSysMin.bufSize = 0x1000;9 j! Z& O  _' G( @8 _- s
SysMin.flushAtExit = false;5 _, y$ {/ D  C9 m

( Q+ {1 `# F3 S$ R0 g! [2 @var System = xdc.useModule('xdc.runtime.System');, G& p- l9 S/ L! C4 w* ?5 f
System.SupportProxy = SysMin;
4 o9 M2 j! G) i7 D  Q+ P& [& o. f, F5 a
/* configure SysBios to use the lower half of Timer 1 */
0 h/ y; B0 ^/ ?5 _" Xvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');( z  N3 o1 T  D: ]; \
var Clock = xdc.useModule('ti.sysbios.knl.Clock');. U( W6 K3 l" r, ~+ j
Timer.timerSettings[1].master = true;6 u1 t9 u- w8 Z" b7 ^8 \2 T
Timer.defaultHalf = Timer.Half_LOWER;/ s2 h+ o/ e; K! l) I
Clock.timerId = 1;+ m; |: v0 J1 F8 m
0 I# x% l9 ^& i
3 V: I) u+ p' P( M& ~
/*! ?7 }6 Z5 W# H+ X0 C
*  ======== Miscellaneous Configuration ========
; y& b2 b( V6 N- |1 ]  {6 Q* d */
5 `7 u9 x5 o8 u# j& ^( w) N2 Z4 z! }. _3 E" {3 ?* Y3 Y: c9 K* S
/* set default diags mask */( d) }: B( A' y+ t0 T, K' g
var Diags = xdc.useModule('xdc.runtime.Diags');3 q4 R# [1 K, k# ]0 \
var Defaults = xdc.useModule('xdc.runtime.Defaults');
1 k$ l* A9 |& X; q
! ]( H( H; p% Z% JDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;% f. |7 a9 V) \9 ^# D4 x) \
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
. B$ W/ h" T5 ?* |Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
; M* |; u; R( k% s5 dDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
3 l4 B$ o) }5 e( P' cDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */' f* ^2 g# {3 e. W0 C2 P
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
8 e5 ^! c- Q5 f& n' ^" c8 kDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;$ U# o; S8 H; V8 l8 m; o
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
1 R! g* u* v/ O5 _Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
. L+ s6 j3 @" u8 c: @; D1 ODefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;5 H2 W( ^) L7 w5 m& R8 C
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;9 i3 @. n9 @- ^8 x7 g
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;" e' C& ^* I: E6 p
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;8 U" I, ]. s5 O: C
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;4 \; p$ ?& a9 n" J
8 r- j1 G0 }0 v( l& `- T$ |1 P
/* override diags mask for selected modules */  R* M; q' i$ Q
xdc.useModule('xdc.runtime.Main');) l* q8 J0 T4 K( T8 S. d8 w* d
Diags.setMaskMeta(
. m6 e& t+ Z" @9 p1 w1 I$ _    "xdc.runtime.Main",, t& o5 T0 H/ Q/ ]+ c
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
0 d* V/ F7 C2 N) `% x5 c    Diags.RUNTIME_ON. u5 r& J0 g' S3 M7 }
);0 r5 S5 c: J9 y9 _

3 V& s4 k4 T" L3 o: B/ x, gvar Registry = xdc.useModule('xdc.runtime.Registry');* W& I2 N6 \' N0 Y5 i
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;: s- _  x9 u+ ^9 y& i) J
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
- E: U5 k0 y& aRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;  g, b. ~9 ?' d7 e7 T1 c: L; U% `
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;9 m- \; U$ \% Z0 ?/ b* V

( o  C+ C! |0 P/* create a logger instance */: k4 `0 Q6 S- z! ^
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');; y  t5 S3 ]  h: d/ K, a
var loggerBufP = new LoggerBuf.Params();
3 S$ Y, \4 |8 M3 b; w- RloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
6 D3 X; a* e0 R* i8 {; p' H" w! rloggerBufP.bufType = LoggerBuf.BufType_FIXED;& S) ^& `# ?% w, G; L6 M

' g# G% @: I9 A/ qvar appLogger = LoggerBuf.create(loggerBufP);
* H% a; j! o, H1 rappLogger.instance.name = "AppLog_Core1";
+ T% C! n! y5 s6 l4 ~1 }Defaults.common$.logger = appLogger;
- [+ }- C& x9 r( R' G5 UMemory.defaultHeapSize = 0x8192;    , n7 D7 m: a6 ^$ X
Idle.idleFxns[0] = "&LEDStatus";; A$ A$ h! H+ @9 M$ U  H; j2 ]
Cache.initSize.l2Size = Cache.L2Size_32K;
* }; c3 R% z, c, H1 e
. h! E7 B3 l& W5 D( ]& w
回复 支持 反对

使用道具 举报

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 */; X9 e0 F+ c8 X$ T; q' \
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 R$ W5 }. F2 T! kvar heapMemParams = new HeapMem.Params();5 |1 h& D- Y* v3 {! C
heapMemParams.size = 0x4000;; B* l, o0 P' Q! Z

! ?" G4 z0 h7 S2 P6 A" svar Memory = xdc.useModule('xdc.runtime.Memory');# }- U# |, j! G" X- s/ @
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);# L9 X9 B9 ~1 R: v3 |( A8 o5 x

8 K- z% l  C8 p( \& E7 [# T我大约calloc  每次共计大小为5K*16bits,7 k. |, t' Y9 {, P& u7 r
而默认配置才0x4000、需要改大。8 L: \8 D( H. `# ^1 h; p
2 Y+ Y  R6 P$ [( U, h8 k' Z
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
2 N  ]8 H7 `* O$ _9 g/ p2 b' s" xProgram.heap = 0;( K, u) B6 O( h8 E
Program.argSize = 100;  /* minimum size */2 d/ M& _- F! c2 U9 r
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-12 10:13 , Processed in 0.038797 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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