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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
3 C" I+ Y4 W- D7 Y) {% [6 }% P: B6 g+ ?% W! a+ Z
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
4 H$ j1 V) W9 G) s. N
6 {' i# V: ]  Y! l  x' i其他程序段。。。。。, z0 p) d: A% j) C- _6 F
8 V$ h- W1 B2 V) V4 S1 B% S4 I
   free(x_d);3 r) T6 x+ [& f

+ W! d- D! h# o' ^8 q  i使用DSP侧单独调试功能,验证动态申请没有问题,2 O1 n& ]+ W1 g; n! N. S$ c

* B2 ]( ~& m. s! c  k; ]# E但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
# n+ ~1 q: v' B2 T' q/ s

( g% r* [, T- m; `3 H1 w: r9 f4 G
4 w& \* R! ^8 k9 Q" d# s4 X5 r! U# Z
) u4 l0 @" Q. H* T% Y* Z
4 F8 k0 A6 [! k) |+ y4 X

$ q$ P) M) Z9 m2 b6 ]- l9 @. _" p+ \, M
+ J8 n6 @, R7 B! P: I" ^! X9 s+ b
0 [- q. Z0 v8 T# T6 G9 k* L1 b
. L% z3 ?8 k5 U& E& o
, |) S4 N+ Q- m4 @0 V% B% z" ?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
3 a  |$ `9 \: q/ t1 {  d我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
2 a" _# ^8 G* M# V1 U# @& @(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
, j1 Y- J6 C$ p0 n2 V& f3 t, k
9 S2 \0 b' x" ~% w7 w  c3 A3 r
是不是需要在DSP.CFG中进行配置
/ r3 l+ y. T9 D* ]1 e. O$ U4 J我现在的配置为
( I' q" D8 e8 d. r4 |8 Q! q& W+ M. W. Z* z/ X& @6 ?8 z. K
/*
8 U8 d8 \- `8 `( n *  ======== Operating System Configuration ========
! E& H9 ?+ w$ `- k! x2 v- w( Z- v */& n6 K$ e7 i* v! A
7 J" ^# A- v  \/ H/ B  {) ~+ S
/* no rts heap */7 q( y' P& |+ X5 A
Program.heap = 0;
; f# U# W" [: V. F& V; R0 KProgram.argSize = 100;  /* minimum size */
* O/ c/ z- g: jProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大3 Y8 ]5 Y; h+ b

; W9 h- w6 l' z5 p  z/ M( y9 O+ y/* create a default heap */- y9 y7 X" D" C$ h0 r
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 ~, d5 d1 g* j+ s) [var heapMemParams = new HeapMem.Params();
: m5 X7 [5 x! l( [& `. T+ I5 i7 D# n) {heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大  F  g9 y: `/ z$ j) X
- P2 A7 T. A% V4 s( l2 ?4 a
var Memory = xdc.useModule('xdc.runtime.Memory');0 d$ x# P; d9 _/ G+ L' M# ]
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
; v, y# {5 ?( J  d. x
. W, o3 U: V, [1 A, I7 q/* configure System module */
0 A! \; e' d: ~$ T9 R8 D, I+ Xvar SysMin = xdc.useModule('xdc.runtime.SysMin');: X8 O+ H* B2 u# l. l8 b: i8 p0 n
SysMin.bufSize = 0x1000;2 ~- [4 S0 L$ K
SysMin.flushAtExit = false;- }6 i/ n. {& p- X9 g4 M6 v

2 \! b) U8 F* {+ |var System = xdc.useModule('xdc.runtime.System');+ W1 p: k1 L# B7 i" r  u2 V
System.SupportProxy = SysMin;) S/ j# V0 a* `  O. ~& H/ [# b& i; C

3 o# t7 ^7 P: F! k8 O+ A3 ~5 S3 T/* configure SysBios to use the lower half of Timer 1 */% o4 A8 |: o' h) x
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');  i) `( X" p  X' G& R* D8 ~. f
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
5 p) R& S. p3 ~* |0 RTimer.timerSettings[1].master = true;( c4 i- C$ r6 x' N8 ~4 M" q* Z
Timer.defaultHalf = Timer.Half_LOWER;! o& r+ [8 E& C' l8 F) O  H% P
Clock.timerId = 1;( ]. }% t; B2 c: a
( d( H3 N: s2 X

4 W& ?& Z# g7 R6 K+ M/*
7 J2 w- V6 |; v7 ~4 }+ z7 } *  ======== Miscellaneous Configuration ========
; x/ u' p% a% d) M4 v2 a1 H */
( l4 ?! `1 f5 L* [% q# t8 L3 v# I$ Y
/* set default diags mask */
0 a9 }5 Z& p3 X$ d+ @7 t- Uvar Diags = xdc.useModule('xdc.runtime.Diags');
) U  ~) c7 N; [9 xvar Defaults = xdc.useModule('xdc.runtime.Defaults');1 U; f; r: I& }7 ^3 ]  [: m

. _2 l) L6 Z+ v! G+ Y8 @Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
( U2 Z8 `7 u+ D" v+ R& Q3 wDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
  \- m7 G0 h  j2 v8 \Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;: J) t: \; [3 o+ {, O
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
- v0 }9 R$ Q: p6 t3 b* ^Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
. o, a2 K' w+ `* ?- }+ zDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;. \+ n, E2 W+ x; Q
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;! H$ y) j3 D% O2 Z/ b0 Z* [4 d
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
8 c1 j% |, {) p  yDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;. i. `2 I$ J1 ?- O6 Y' S
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
* r  R# {* y8 m" Y8 B( n. |  r6 i" gDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
, a/ v+ m) U& G0 j& wDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;$ P1 U0 U5 J) ]  c" F. Z
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
/ q, Y0 A6 k! z: [; L1 ADefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
4 X* o; P) t" L) P% i- k4 ^8 y' C" P$ N8 F# M2 p  X9 R  i- \
/* override diags mask for selected modules */; t, R+ x9 y# ?7 `% Z
xdc.useModule('xdc.runtime.Main');- `( g8 {7 Z$ c* s/ a8 c
Diags.setMaskMeta(
* P7 B! R+ r" m3 u6 [" Z    "xdc.runtime.Main",3 @# H7 K" \) V6 L
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
+ u1 b1 d9 x5 I1 s7 Y1 K3 g3 i    Diags.RUNTIME_ON
  d0 ?! w6 p2 t6 M! V);
$ b% t, ^3 `9 j% m/ x* h2 c/ |4 z, Z( U% I" R  v' ^
var Registry = xdc.useModule('xdc.runtime.Registry');
: B( T  f1 i: g4 _7 bRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;) O1 j! r# m- O
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
" ]$ }! G3 {/ L  QRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
' ?! L: o8 L( ?' n9 P3 |& pRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
' `* h- R7 H+ ^4 e9 `: K
. [, x' Z% G/ F) j1 _# X4 M/* create a logger instance */
4 q1 }/ @6 T+ ]5 e0 M  _var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');$ H( M* p0 f9 g% c
var loggerBufP = new LoggerBuf.Params();( q+ v* b3 p  j+ @4 S3 S
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */' f" A( N6 M! T7 w3 p# `& @
loggerBufP.bufType = LoggerBuf.BufType_FIXED;1 G- Q, H0 J- Q/ `# q

- W2 |6 x. l3 F& U, X0 Fvar appLogger = LoggerBuf.create(loggerBufP);
, k; N, p" _1 v$ s/ }% s# MappLogger.instance.name = "AppLog_Core1";% R( I. D8 N9 d
Defaults.common$.logger = appLogger;
8 K) e9 u& s6 f  \0 DMemory.defaultHeapSize = 0x8192;   
6 E1 @5 C6 |0 x, p5 r4 K; uIdle.idleFxns[0] = "&LEDStatus";
( Y0 V. b& w) x0 ~Cache.initSize.l2Size = Cache.L2Size_32K;* x- M; y) C$ J- A2 i  B
. K, r0 T0 ?/ `) n
回复 支持 反对

使用道具 举报

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 */
- ?" e* ]# b! F' q! i* W4 lvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
! G$ i+ M, X4 L" |var heapMemParams = new HeapMem.Params();! p9 Q& G$ q3 b; R9 W
heapMemParams.size = 0x4000;
5 E5 q7 O# M# I6 D0 Z3 x# @. ]4 @4 C0 E
var Memory = xdc.useModule('xdc.runtime.Memory');: F$ U7 }! j) C! q- Q/ ^
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 q% c3 Z8 @5 q# o4 C7 D, _- p+ C4 n- F; r8 _
我大约calloc  每次共计大小为5K*16bits,0 t$ K! _! Y' N
而默认配置才0x4000、需要改大。" r7 f8 K) D2 J. b0 p$ t( v
) H' d6 Y, H5 Z* q: |' I3 e% K; i( l
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */1 I$ w# {- P0 e0 a$ v8 V, u  e
Program.heap = 0;& T5 }6 w" r) k( s" Z: F4 z
Program.argSize = 100;  /* minimum size */
; _$ R; U( k; {2 v" V. m- U4 k1 n, RProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-29 19:41 , Processed in 0.043659 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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