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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
% @* \8 i1 J& Q* I1 B1 @6 n- T, P/ `5 f) H- H
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
2 b1 s4 [6 [- F. U: f0 L: Z0 Y& X3 N  D+ l
其他程序段。。。。。3 ~, ]; z4 c9 Y
* y$ ~4 L4 ?7 [; U" H
   free(x_d);% k, E# S0 M% w4 Q8 B% T2 m5 Y

' B0 q' U! q" {1 _4 h5 r) o! w使用DSP侧单独调试功能,验证动态申请没有问题,
+ a# o. d: f8 ~
$ Y2 n4 p2 q1 Q: t但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。4 ], e9 q% K9 I; J

+ y/ v" }; q; S5 \5 `
# P% H* ?7 |; m, |' e8 F- t5 q. {. `0 c) |. ?2 ^6 t; |
* x: b& J$ Q2 k! s. Y% y/ F

( O7 ?# f5 R- y3 w) F1 U2 Z3 x; R8 p* b0 c

" M0 G  r8 R# n  J/ Z* T
' L- b. w" y0 f7 b/ ]5 L# O( c4 H. a: L
6 V: T: U* p! v, _+ g4 Q: C) M
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明4 X  G  s" a. l- l2 @6 T# i
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
& \1 |( i, ^; z: Z! i(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
4 l% \+ U' _. a. m

% c& Z2 X9 O$ l: I$ d  V3 \是不是需要在DSP.CFG中进行配置
$ Q9 V, i; _8 j  N# ?0 u我现在的配置为7 G; ~  R3 P9 j  f' j* l. L# Q
/ g4 f# g. ]" P1 T- D5 m9 ?
/*
: Q1 o8 l: T- X6 X0 R *  ======== Operating System Configuration ========
0 r. P) i; ^/ v9 ? */" S) J* s  H  q$ U5 o9 |. h

' m  l3 L6 g+ l1 J1 }/* no rts heap */
& e) F4 e  S. J, E- |) J& yProgram.heap = 0;
$ y" q$ z! E6 Y& O6 ?  r# h) hProgram.argSize = 100;  /* minimum size */3 D, M- Y/ k( O( }/ u" G
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
4 e6 X6 \0 s! ?
9 l! s' G$ p8 J( y1 a9 T/* create a default heap */
7 z& \9 [  K1 M" F4 N  E, uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ U; ]2 j; A$ k9 b( [var heapMemParams = new HeapMem.Params();. c/ I4 I* d9 @* y
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
1 l) e# u/ w5 a  D5 ~  d2 S, I8 Z
# d2 M+ G. {2 S3 ~5 M) y& I
var Memory = xdc.useModule('xdc.runtime.Memory');5 T$ A. q3 n1 P8 E2 m
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);  @) Y# _4 c% _$ D/ G* Y

! a& l. L2 }4 o6 V, B2 @! t/* configure System module */( W& ^) o  b0 z, l+ t
var SysMin = xdc.useModule('xdc.runtime.SysMin');% i+ n4 M& H/ @8 x. p
SysMin.bufSize = 0x1000;
$ n! Q0 E2 w  u+ {1 dSysMin.flushAtExit = false;
9 A/ m: ]1 M; x' _- D" S. N3 ^
: f! J2 G. W) P3 Lvar System = xdc.useModule('xdc.runtime.System');: ~: g+ q& w0 S1 a) O
System.SupportProxy = SysMin;
7 ]7 e0 e: c  E# }# X
; H. N+ O4 r4 K8 a  z' P0 o/* configure SysBios to use the lower half of Timer 1 */
9 r- t% o$ Q& H6 V" b2 jvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
. f/ q6 Z3 b8 o; i4 p6 z- n" r0 gvar Clock = xdc.useModule('ti.sysbios.knl.Clock');* v. v2 A2 c: b" v% C
Timer.timerSettings[1].master = true;
2 j) O2 ~. i& DTimer.defaultHalf = Timer.Half_LOWER;6 C0 Z. Y* P4 ?" A
Clock.timerId = 1;
3 t6 P: E, g  [& m& a1 T, N3 H+ ?( C% C
" z  b8 j+ Z0 e: p" S/ }: ?# s
/*( q: `; o- u4 ^- x% Z3 c
*  ======== Miscellaneous Configuration ========
8 ~  b; y5 u1 |' e */
1 F6 Y% D" i, y$ K1 j# [$ [$ b1 B1 d" V7 P  h  B
/* set default diags mask */, y7 b6 i8 e) E% n
var Diags = xdc.useModule('xdc.runtime.Diags');* e0 |0 @/ a5 C. x
var Defaults = xdc.useModule('xdc.runtime.Defaults');
3 {  C' b8 A" b' f. U) p, M! R9 D" x7 V: H8 u3 o
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;/ p5 r* E/ h- W; ?( c; x
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;& ]' t% R0 I+ c
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
& T7 r0 K! X8 }Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */0 z" @$ r0 u1 m' V% M
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */& m# k9 i- p3 M
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
7 }8 Y$ O* X9 k% N* `Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;2 t) e* f' B: r# n9 z5 G
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
* ]  O4 F8 H+ o2 b9 w* {7 ~; b* g7 CDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
% A5 E) G( S9 P4 S( n) B  UDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;) \: b* B1 d  i4 a
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
8 D% ^7 n* e" Y, m- \/ cDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
! F; Z: R$ @5 L# rDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
) \4 \3 L0 h; SDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
* A9 X8 W9 E6 _% E
3 v3 B5 ~) v+ @. E( Y3 _/ J" a/* override diags mask for selected modules */9 {9 K/ x( x& }; P" X% k+ r
xdc.useModule('xdc.runtime.Main');2 |+ b+ I  c6 x; _! i2 U5 x
Diags.setMaskMeta(
/ A9 ~2 r  w( I& G! q    "xdc.runtime.Main",  ~; \5 I9 F8 l& ?; s
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
% {8 _3 w% X& h, c/ V' j% S    Diags.RUNTIME_ON9 P8 v& t+ d& `- D- p' o& \/ Z
);+ d$ p. P' g+ P" o
' U+ O. f: P3 z, Q: o; e7 K
var Registry = xdc.useModule('xdc.runtime.Registry');; z& r+ @. V3 n6 U8 L
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
3 E+ N( P9 T/ {, q5 ERegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;+ d. V( R* Z) k: a/ C5 Q9 W: M$ i
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
* C! k. {' n* @, k$ HRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
0 T: g" U2 m0 p" h# e' a3 X1 E% H% o
/* create a logger instance */9 t5 L$ ]5 p+ Z! k: T" \3 y* `$ T) {
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
6 i% y! w' ^" ?. V# @* `var loggerBufP = new LoggerBuf.Params();) o, w* Z* l* k
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */" ?; s9 a9 v7 s( y9 |
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
0 a- W7 z5 ~. o$ j* s, e
" U& J( v) G, h, X( j% ovar appLogger = LoggerBuf.create(loggerBufP);
6 v" C8 N! p2 G2 o0 u3 F$ |appLogger.instance.name = "AppLog_Core1";
3 ~6 @. u9 j4 n" N+ A0 zDefaults.common$.logger = appLogger;5 D+ N. {9 @, a& S5 ?) M3 {
Memory.defaultHeapSize = 0x8192;   
# L# j0 \$ o* _% ^# Q! A1 ?Idle.idleFxns[0] = "&LEDStatus";
3 ~" i  c/ X: G% ~$ Z6 t3 CCache.initSize.l2Size = Cache.L2Size_32K;- [+ C+ a4 A1 @+ z: u8 `

7 a5 _9 ~" q/ O( z/ J% A
回复 支持 反对

使用道具 举报

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 */: o3 _- w- p; }! ?0 G
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');" Y8 O- L# r  R7 n$ `/ b/ h
var heapMemParams = new HeapMem.Params();
# _1 v% ^. s6 X& uheapMemParams.size = 0x4000;
7 ]& i6 l+ O: X; Y( B7 i
( K( Z  D2 ^3 h" h! Dvar Memory = xdc.useModule('xdc.runtime.Memory');# G& o: [6 t% g" V, O" [
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
" y- s4 f7 W6 |3 f  u( ]; N* \8 y% e6 D2 K" i8 j
我大约calloc  每次共计大小为5K*16bits,
- ?7 P2 @' ]) m而默认配置才0x4000、需要改大。, w0 x/ b" C0 [
* ?! r" L+ Q$ Y
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
# S- l. |& o7 m' Q4 PProgram.heap = 0;
) _0 z' V2 p- |1 {+ q3 J8 B! BProgram.argSize = 100;  /* minimum size */
. ], ^$ m' [  I7 h* CProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-2 09:03 , Processed in 0.046448 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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