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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
& A* V' [( z. w6 e( E
3 N! v" U( Q! Y! I. Y    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256" F4 i$ ^# I1 Y% ~. W' ~, b# l

# g, x1 ?, a0 F+ L8 S# k: ]其他程序段。。。。。) T( ?5 e% a! S$ M
, I; D& ^1 }. ]
   free(x_d);
9 \$ u- T4 i3 W1 F* G
7 F2 _6 u% W+ G2 V6 J1 U& T使用DSP侧单独调试功能,验证动态申请没有问题,
6 V8 [8 K3 T+ e4 O% x- s1 a+ o9 [5 z2 O/ @  {$ L# ]
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
& E2 _9 r$ }5 C& e1 j

- e. ^2 Y+ c- ^. @, D
$ q0 F  ?; p1 H/ L+ \- @% G" q
3 I3 c# ]  d+ h4 {+ e/ r# n' Y2 ]
! T  T7 p8 n+ n% \6 U5 ~2 G# f

' _/ @/ t; S" @! }8 C1 s; }8 g# S. K/ ?( w9 f

- w6 P* c9 h2 M( S3 |) L, V  _1 l) Q' N9 p, `
0 Q1 {  H) B( c& ~# ?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明0 ?3 b- Z+ C" s: T5 J  w& x
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下; Q- P/ Y; P5 F0 \8 N  o) C9 e
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
( i" K8 R2 D: z; E! {7 J+ n
6 G4 W# }8 o' q2 L
是不是需要在DSP.CFG中进行配置. S- b- r. w  M4 s4 s# |) G& ^
我现在的配置为
% \; E: F" D6 {
1 ]) ]" D" G: W. R8 ], o/*0 ]5 }/ h0 c: ]3 W
*  ======== Operating System Configuration ========
4 \; S/ q  O% A1 D+ U+ Y, A */5 v8 }$ i( e- a: f/ V! z. k2 Z" w

% [, t' ~& ]7 @7 Q1 s9 [  J" O/* no rts heap */+ n- @3 w9 A9 G  m  K7 ]! g
Program.heap = 0;
9 Q! n0 ?. Y. C+ \8 [Program.argSize = 100;  /* minimum size */8 M: A1 a* g/ G& X7 W0 u
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大( m% d  Z1 i* p8 ~

& Q# {$ w3 x  Z: x/* create a default heap */
& F" A* `; ^. _1 i) D5 N, wvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 N) p) O& b* q5 g) |var heapMemParams = new HeapMem.Params();
3 {  e' I# L! W3 q- P0 {heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
' T: o: T: {- g$ x2 J; G- P* H$ u6 \( g* j/ I7 B, {5 `
var Memory = xdc.useModule('xdc.runtime.Memory');! _% R4 f7 |" F- N2 g5 W
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
( f0 x# k6 k( h3 H# g8 h5 j$ T" ^2 M8 E# e7 M4 w
/* configure System module */' O- S& G1 H0 w7 o
var SysMin = xdc.useModule('xdc.runtime.SysMin');7 A9 T6 q- L8 U/ t" R
SysMin.bufSize = 0x1000;0 F3 F, K/ g7 h+ I& T
SysMin.flushAtExit = false;
' k, b$ Z9 C7 S( z& G% @
# i5 y+ ?$ ]# U1 w6 pvar System = xdc.useModule('xdc.runtime.System');; F( ], {6 w8 _
System.SupportProxy = SysMin;
! d- [% c, _5 y9 n: v" U+ y7 s" n- N: P: o( @
/* configure SysBios to use the lower half of Timer 1 */
$ {: c* p! S( I* F* Ivar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
5 D. j+ A2 o3 \5 N9 }5 t1 ~& b/ tvar Clock = xdc.useModule('ti.sysbios.knl.Clock');& }) I9 h5 B+ \7 W3 H
Timer.timerSettings[1].master = true;
6 E: z+ \; a& u% \Timer.defaultHalf = Timer.Half_LOWER;. W: _& {. O; a- j; Z( [
Clock.timerId = 1;; X9 n4 e3 v! F. W& L# f8 N1 S* ]
3 a2 q) u# r* U( s

+ G! v1 X1 V0 c/*0 ~9 M1 r1 K/ W5 L
*  ======== Miscellaneous Configuration ========: \# R1 E* v5 A
*/
+ K2 f$ v! h! Z' I. m, Z% d6 |( Y, y1 Q* k$ e8 E- s9 N5 F" G% O$ C2 i
/* set default diags mask */
3 o& N, e3 Z  K, g  v( Y! ivar Diags = xdc.useModule('xdc.runtime.Diags');
* N3 t. M' l8 V' h5 _var Defaults = xdc.useModule('xdc.runtime.Defaults');
8 {( D5 h* p5 M# C% p! u4 M
5 r# N7 E) L: J! wDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;) q% h, m4 }, F7 X
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;; S6 o1 M3 ~' H! D; C/ Y
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;* [" i7 E& J" I/ V4 z
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */5 Y9 W, X1 w) s2 E0 \) ~7 Y
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */3 ^) G8 ?4 k# t1 o
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
) j# F0 g; O7 ?Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
! T2 F9 `/ {0 s2 b. HDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
* g; n& R: b: k' B% F$ e* U. pDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
) X9 ~  f! Y8 QDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
3 N  O1 X+ G6 q$ \% M) y5 e' H3 nDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
$ |4 D! f1 B* t) b0 WDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;( q, {# C( m7 d  o& w0 U1 h
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;4 B* Q) L" k; m) @8 c4 Q
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
  T1 z- z3 s3 P( g, p
6 V4 N& j4 b9 m: d/* override diags mask for selected modules */
' I5 @1 O( k$ v; Xxdc.useModule('xdc.runtime.Main');
" T, K9 L& i) Y0 l1 a+ LDiags.setMaskMeta(
0 z$ \4 L) R& x! O    "xdc.runtime.Main",# m5 n0 p5 w; V+ G
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
% H3 _( S: t% r1 A6 e( v- t# r. v9 [' ~, x    Diags.RUNTIME_ON- z1 V: U7 @9 d0 q
);0 @* k" a% ~% P  T9 Y' q4 r
8 j& j$ j. l  m
var Registry = xdc.useModule('xdc.runtime.Registry');
6 m$ F( E) g' g: lRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;. Y$ G3 L5 R& R+ {
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;6 D  a0 \+ R6 y9 \; `) {& c
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;4 C/ b: ~5 \, k4 b
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
, t9 a1 D1 }0 z3 t
' T$ S+ g( S- H# I* o0 s/* create a logger instance */9 B1 Y' Z; }. J- V, q' W
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
, F7 Y1 p0 \  O1 S6 B3 Ovar loggerBufP = new LoggerBuf.Params();
' O9 G$ c, ]0 kloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */& s+ i$ ]9 [* d! d4 W5 I
loggerBufP.bufType = LoggerBuf.BufType_FIXED;& x% D3 h( u: |3 R1 _3 u# b

  ^1 g, W  f! S" D. Y  mvar appLogger = LoggerBuf.create(loggerBufP);
* D( h" m8 V8 Z. K  K$ xappLogger.instance.name = "AppLog_Core1";. {$ V; Z, l* C! D' Y. b
Defaults.common$.logger = appLogger;/ b/ k' n, {. @+ D
Memory.defaultHeapSize = 0x8192;    $ t/ W. [$ S: Q1 W1 s9 e4 \
Idle.idleFxns[0] = "&LEDStatus";
# |5 s& q6 x0 d: s) c. `Cache.initSize.l2Size = Cache.L2Size_32K;- M; R3 F4 N9 W7 X( ?- v7 c7 g3 J" \) R
) }& [& B+ ?' _: F6 z' I" k
回复 支持 反对

使用道具 举报

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 */
3 d4 v0 q/ l1 _# {6 m+ avar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 ~* A1 ?! h4 E3 k4 [9 A( n; o
var heapMemParams = new HeapMem.Params();
$ H$ K0 \* E; d9 k4 ZheapMemParams.size = 0x4000;/ K- a4 M% D9 l! w' e
7 a( s5 v, @8 |6 g( c1 B- {
var Memory = xdc.useModule('xdc.runtime.Memory');
/ w: ^+ ?9 c- {- M# C3 b3 L: fMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ U, R7 a2 |; v: I# G/ @1 E9 z/ ]8 R7 j- O9 ^
我大约calloc  每次共计大小为5K*16bits,5 r- o: D$ H8 Y  e0 a+ m
而默认配置才0x4000、需要改大。
- g; Q9 T& |8 U! `
+ b+ N5 L! k7 u: G
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */+ `- E/ Y; I! {) ?- U9 c- F2 M# [
Program.heap = 0;
' O' ^/ J' _6 S+ M! wProgram.argSize = 100;  /* minimum size */: x. U" k) p4 i5 Y8 ]
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-5 05:32 , Processed in 0.041402 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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