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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构2 q# v5 s# P" [) @/ `9 u2 U

! p4 V4 P! X& i' V5 W0 b    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
# k  g% n' G# [9 v6 S. r5 M# m8 n9 A: ?
其他程序段。。。。。
! I; R/ N; R( }; e7 d- G
+ N$ z; B& f$ }$ K   free(x_d);
+ w3 f! B$ S$ B7 `% h
6 f  q9 y: o0 w( e) r4 E2 s使用DSP侧单独调试功能,验证动态申请没有问题,
+ I9 k4 e/ A8 U, U+ t+ `" t1 i5 k) u  _* @; a
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
$ Z9 j# Q$ Y4 n# f5 ?

/ K/ r' M# \# r/ d) ~) e, Q  a+ A+ U/ `

8 v5 _/ {* v& ^! Y& P6 x0 e5 {# f
+ L( G7 G7 o( o. L
- |( K* l0 r; C1 N
3 c* ~! m( C. O' U3 w+ e: S, T- J! }3 H9 G, `
9 P# H# `% f( `: ]1 B: Y
* F# A% p* w9 F& S, X

* a, _- a# H& q& Q5 P) U0 l( R
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明  z3 ?+ a' F8 _8 p
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下0 X* N* w+ C! {, ]7 ^
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)9 K- h5 d, F& z6 p: f/ C2 k

. O/ X0 n  I1 {; n3 t是不是需要在DSP.CFG中进行配置
$ Z: |! G$ k3 z* |  C. h, R6 _我现在的配置为
/ \, l- I9 }3 v' ]  N, {) o8 \/ j6 }
: L  S" |) l2 l* i0 ]" K/*' ?$ |, y* P. x% g$ F: P
*  ======== Operating System Configuration ========+ {  i: l/ d7 d3 @3 a
*/5 G. M2 G' l: ~1 x$ H3 B8 ]9 t1 D$ o

) Z9 E9 H: q" R* B8 W- w# g/* no rts heap */
& [& E( U3 L, Z, ]. ~$ \+ _Program.heap = 0;5 g# U4 o7 H  n8 K, ]
Program.argSize = 100;  /* minimum size */
  C: L7 A* N2 u' @2 e; I" J# kProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
/ v9 `! }5 L1 N; _5 b9 L$ l. `5 I
/ Z" @7 S7 U( n' I% g9 V6 M1 [9 x/* create a default heap */
4 A$ z" U5 T6 ?: i8 m% avar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 N+ C" ^5 }: F1 b
var heapMemParams = new HeapMem.Params();# n+ c+ \0 B% K7 Q
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
. z$ u& U& `1 T; \7 T/ ^
9 H7 k* x/ B. W
var Memory = xdc.useModule('xdc.runtime.Memory');( \3 h& G/ `* v* N3 K- ]; m3 `
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ p; u; v  V7 Q& u$ z* g' W7 Z
! A, t0 I  u# i' ~- `/* configure System module *// S4 o  E- ^2 y) e
var SysMin = xdc.useModule('xdc.runtime.SysMin');! o' [9 O* y* o' O7 a
SysMin.bufSize = 0x1000;
% C1 ?6 P# N5 n" o. J' B0 fSysMin.flushAtExit = false;
* n% D- j' c& c2 n6 L! ?2 p6 l+ l. I6 F8 y" m( s
var System = xdc.useModule('xdc.runtime.System');' C* |: U& {7 N0 x
System.SupportProxy = SysMin;# ?) d# w3 D; B2 o" L0 }
: d  v4 k3 o7 n3 p: K
/* configure SysBios to use the lower half of Timer 1 */
  s( ?* G6 E# Tvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
8 a+ w% M2 t0 H( b3 V1 N' Z/ U* xvar Clock = xdc.useModule('ti.sysbios.knl.Clock');3 G' D  f8 \1 d- F* i- x# X
Timer.timerSettings[1].master = true;% `5 T$ W2 p! D$ ]5 d4 S' l) h
Timer.defaultHalf = Timer.Half_LOWER;1 c! T0 B9 f( i, Q
Clock.timerId = 1;
4 V( C0 N! g( P' x$ P2 j! n3 L3 A
9 ?- c  w+ u( V! i) l9 U
) |4 K: K; c6 [. `. y+ ^5 B# N/*+ h$ a* Z- V% q: M+ ^7 F! a1 R
*  ======== Miscellaneous Configuration ========. u/ x# [8 z) _2 _5 P4 G
*/# w* P* [& l8 s* e9 L

5 G5 y. s! \6 [; @8 T2 l/* set default diags mask */
9 e- V! f% E4 Rvar Diags = xdc.useModule('xdc.runtime.Diags');( l' }, s. d2 R5 }) e3 ?
var Defaults = xdc.useModule('xdc.runtime.Defaults');
( o: R) |, O; F6 Z. e+ E! ~, h9 }7 K5 w/ `
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;8 j! y- E  }7 T- Z: u! i
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;& |- f) M6 O2 t3 r3 i
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
; y- p, E3 j) b7 B3 q6 [# fDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */& d1 }1 V+ s2 r! r
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
1 ~! M8 e! x2 t/ ~$ I% n$ XDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
' B9 i/ e# T/ j" x' Q) t+ `Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;9 j' S  b2 ]0 L
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
& W/ D3 j5 d, aDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;+ R& b0 V: Z5 g) h( r* v! O. k
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;1 f" y1 ^4 |0 G3 r
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;  X' S( i9 ?: c  M
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
/ x* M% _! p5 h" C( N9 Z1 c( O: n) B( xDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;4 s5 e3 [1 ^- z- }1 R5 w6 B# G% z
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;/ e2 w- L0 T+ e$ H

" t$ N- L" c, m+ o: C; A/* override diags mask for selected modules */
# U  {; O; O. g% Txdc.useModule('xdc.runtime.Main');
& |3 ^1 g" p# j  w1 p( e4 Z! KDiags.setMaskMeta(
# M! ?7 K/ U6 U7 V1 Q/ g. X    "xdc.runtime.Main",
9 n* Q- {4 u" v( a6 A4 ]2 @# h    Diags.ENTRY | Diags.EXIT | Diags.INFO,9 Z( B3 B3 l( J% p. _
    Diags.RUNTIME_ON
, N/ c) @4 i% \6 }4 f) j);& l! t- V. j1 c& M0 R7 e4 D6 ]
8 t. Y* @- P2 B$ n( n4 `6 @
var Registry = xdc.useModule('xdc.runtime.Registry');& n; ^; ^" V& _' a$ Y, \; ~) O
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
* S% H' k/ L3 m2 p- oRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;4 }) z! P( r. D1 N& I" q5 v% b
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;* b/ ?4 `6 l) z+ y; [
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
  \+ a, b+ ^" {  S9 ?: K8 Z) V1 r' b+ c/ y+ S1 {4 @8 ]& s: D
/* create a logger instance */
+ J% K% B$ g9 l) G  M) H/ S6 ~. S1 fvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');. r. O* `; Y& x$ Z3 B1 [8 T! }
var loggerBufP = new LoggerBuf.Params();
& D$ J( J4 H3 B  W0 w7 L) G# s! O5 QloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
0 `% j% k& i! {# v+ y6 N' _loggerBufP.bufType = LoggerBuf.BufType_FIXED;
% r# s  N; l0 N) p- G8 L, E  ?, \" d) x9 [  A
var appLogger = LoggerBuf.create(loggerBufP);
+ O/ U: S. y- B9 t/ \- HappLogger.instance.name = "AppLog_Core1";
7 x' Q' K: x9 ^- QDefaults.common$.logger = appLogger;
/ k" C; j! z3 Y& nMemory.defaultHeapSize = 0x8192;   
7 {) m( L+ e) v$ D% U$ jIdle.idleFxns[0] = "&LEDStatus";: k6 A) L* u* m
Cache.initSize.l2Size = Cache.L2Size_32K;/ a/ x8 }- S& w7 z$ q6 l1 }" I
) {* Z3 i9 H# b# ^/ E- V+ I
回复 支持 反对

使用道具 举报

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 */
9 F0 `. p9 ]: t9 Qvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ i3 |8 o" X; a4 s* O" jvar heapMemParams = new HeapMem.Params();
% e9 n2 k1 B& W5 v* i5 ^+ wheapMemParams.size = 0x4000;
$ @! M* }0 S: j* o+ N% Q" j; w- i4 U# O
' p; z5 E. S2 ovar Memory = xdc.useModule('xdc.runtime.Memory');6 |( z. t$ S0 h- D: n
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);& {0 m: M; m8 m, C8 i) C

$ P; ^. {6 Y  F我大约calloc  每次共计大小为5K*16bits,2 O- k5 c% X5 j
而默认配置才0x4000、需要改大。
7 C: Q3 Y8 l* `3 d
7 E) _2 u7 ?5 L4 L# r) ~5 ^* i
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
( \( l, `' @5 E6 k' _( uProgram.heap = 0;
9 ?; [; Y- N* f% T- F4 l8 UProgram.argSize = 100;  /* minimum size */- \$ m6 Y# ~; ~
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-30 17:18 , Processed in 0.039601 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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