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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构. V% C% F- I& m3 e
# e& L, U; e( U( Z: z8 w9 x
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2562 m) L1 v" @# R1 w, l4 M3 Y& R8 L" h
: X8 b" c& j  h# l! E& q4 F1 \, @
其他程序段。。。。。
" q( u2 q( P3 W, l 4 \) I" u  K: @1 p
   free(x_d);
& y" l3 Z* B9 ~
! ?8 {2 R, k# A, f使用DSP侧单独调试功能,验证动态申请没有问题," R9 q/ ^9 F+ w# e2 p' D7 c

* d- R: h2 b! I% [2 a但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
5 j# B, d4 g3 L5 S, R9 q  u
. a& J' N  Q* n' |; ?
" Z( J+ F2 r# b( d- t/ b$ K
6 u# i! H7 ?9 |' M6 ^0 G1 _
$ v7 X5 y$ j8 J

8 U6 s! {- R$ f' p; D7 r; v& A* c: L4 I
# s$ I) r8 ]+ w+ K+ U6 ~; P# \% Z& g0 v" x8 r9 r, L

" M( }( [7 {2 E6 R) i1 v
6 |  E; J3 B  a; [- Z% B- Y# i5 |  @+ l- U5 k: Z: {
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
: M2 P* b# _- {Program.heap = 0;
) V0 Z3 n# e' RProgram.argSize = 100;  /* minimum size */
# y' L% f. W7 }' B. ^% F* D8 v, U8 ~Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */9 ]! q5 O: y. V
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');6 m& W, ]5 L8 B4 ]3 p
var heapMemParams = new HeapMem.Params();
1 |/ \0 r9 v4 ?5 ~2 IheapMemParams.size = 0x4000;! g$ L/ @% p. i$ ?/ M
/ W  l1 S( D. l. h- e
var Memory = xdc.useModule('xdc.runtime.Memory');
" `5 L: M# W) wMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 V4 t& n. z) t  S) T
  p. \4 D8 n1 T# G* q我大约calloc  每次共计大小为5K*16bits,
6 A, y9 S+ R- C, W( K9 s1 V而默认配置才0x4000、需要改大。& f* t8 k" J: y
. m) T/ G# v. \
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
* S7 H; l) b0 @$ q/ {' U% k我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下2 @* M3 U0 [; q% q8 Z+ }9 k
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)) l, K6 L1 B! \+ A- f! g4 _

) s3 @9 g) K( S) x是不是需要在DSP.CFG中进行配置
9 T" K/ o  q; O我现在的配置为
' U/ G5 ?- r- q6 w) B( f3 ^1 Q( {0 G2 ]3 Q
/*
7 R  p& k: G% x5 \- h5 g$ U *  ======== Operating System Configuration ========/ a! ^7 l+ Y9 T
*/( S$ Y1 [8 P( ^6 v; D

1 P; c6 L% t1 [. N6 F) x4 t9 G9 M/* no rts heap */
, j0 c1 [; c- ~. ]3 O; xProgram.heap = 0;' T1 z; [$ w( ~4 \# N
Program.argSize = 100;  /* minimum size */$ E8 L5 B7 Y0 `8 w6 u
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大8 ]; s2 b; A$ ^8 a

, E' D3 g* z3 h" N/* create a default heap */
: q: V2 \+ k) uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
0 O+ J3 }. l2 O9 u3 Mvar heapMemParams = new HeapMem.Params();  U5 `- N  w  z8 {
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
" F$ E" C- l5 @& k9 B$ }- H2 q$ R" a$ w4 v# q- x; a6 |( {
var Memory = xdc.useModule('xdc.runtime.Memory');: p$ a- K1 D% n
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
. }2 {- W' ~: \
' L( f0 `6 e4 V$ N" c  ^  v7 B! P: X/* configure System module */
9 O! L. Y* V7 U4 y, lvar SysMin = xdc.useModule('xdc.runtime.SysMin');
2 r# e% ~6 I' ~% _SysMin.bufSize = 0x1000;' v% A) c7 y) j) {7 t0 k7 G. c
SysMin.flushAtExit = false;2 n! u4 x5 y+ m" v  n4 A5 R

$ O+ L" l# V. C1 P) zvar System = xdc.useModule('xdc.runtime.System');
  O) l- S4 K& a5 I  dSystem.SupportProxy = SysMin;
3 q4 s6 z/ n/ D3 Q4 a8 k7 n3 }- b# u  z1 e
/* configure SysBios to use the lower half of Timer 1 */
/ D! h  I+ G5 a8 Q4 R8 ~var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
' v/ h0 j. p; T: d& B; v, h0 Gvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
0 k  F1 }7 c8 {Timer.timerSettings[1].master = true;& x7 ?7 i) t4 a$ K  p7 C) _
Timer.defaultHalf = Timer.Half_LOWER;: J' \7 [% `6 X
Clock.timerId = 1;
9 Q5 q* `* ~  N' u0 b: b" W! `3 Y; z& S( z6 ^. v4 [( ]
8 p" u  x/ D2 b3 q( R5 ]+ C
/*
$ l4 V9 O' N$ W  D6 k *  ======== Miscellaneous Configuration ========
7 U$ Y  ~  D# ?' ? */
% e" |* ]: a# e0 ?
7 B! G; a+ ?) e, J# l. i/* set default diags mask */+ A7 x' N& z6 E/ E6 G* ~
var Diags = xdc.useModule('xdc.runtime.Diags');
! {+ L# v# ]  i4 y; Pvar Defaults = xdc.useModule('xdc.runtime.Defaults');. k' `+ K: ~  [, K
3 e! ~0 O* L: a& k& P' N+ _
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;9 x$ B% n$ v, f9 I0 Q
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
7 ?7 D7 U/ `. Q/ yDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;0 k) C9 m* c2 u2 ?2 J* k: e
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
0 ?" M/ c. @8 p) W* X. z! S% DDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
, A' J- m! X$ Z; x' o! G+ B- k- oDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;& |/ ]) R0 |1 {+ w: p
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
6 w+ q  D( Y  E" q& CDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
) t% a8 p0 c7 z. b" z( SDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;" [& o- L0 X# S
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
5 x: D. @& i$ \3 v  y# YDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;; Z$ v8 E9 ?* L$ [% ]# E2 I: N, t
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
  W, f# d7 V+ |6 |  ^Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;2 ~9 e$ O: n$ v' m" T
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;1 L/ E  @% E  `$ C: |
' q0 I8 m" e' z# r: J
/* override diags mask for selected modules */
  h$ l: N  r3 H/ o' D  r( Kxdc.useModule('xdc.runtime.Main');
# B: C, i; U' n+ m# r( ^Diags.setMaskMeta(
4 Q9 _" t) B. x4 M: M    "xdc.runtime.Main",1 ]/ R8 s( G- G; w
    Diags.ENTRY | Diags.EXIT | Diags.INFO," r& G8 X' n; B( q$ ]
    Diags.RUNTIME_ON
, b& w( X3 m$ b/ r, ]9 Y);
/ s1 q+ z/ A, W4 \' w+ u* @  c* O6 `0 A/ E
var Registry = xdc.useModule('xdc.runtime.Registry');# e8 U% @" }& x* X, C
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;8 n, ]; |7 N0 X% M; J) z. x$ [
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;* `2 d/ W8 {- W
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
8 e4 W$ ~, u8 _8 F, BRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
' m1 s% n/ m% h0 ~0 c3 W9 @& Q$ m% i6 x' ~1 D7 }* n' b3 }
/* create a logger instance */
" `2 K* q& |: B6 o- F' bvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
7 N5 z" L* j2 j5 }1 tvar loggerBufP = new LoggerBuf.Params();
1 L9 `# L( c' E2 P& Y! dloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */8 y/ y$ k" Y; L. V6 l
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
. K- S$ p2 M" r  L: x) Y% I6 @5 s' ^# N% L, ?8 i
var appLogger = LoggerBuf.create(loggerBufP);
8 n- d, C; Q  [appLogger.instance.name = "AppLog_Core1";9 i% \& t0 ~/ u% e
Defaults.common$.logger = appLogger;
/ V" c+ A+ H( \6 d+ _9 xMemory.defaultHeapSize = 0x8192;    1 C: ^7 S  l8 `) m0 I4 j" P2 X. G
Idle.idleFxns[0] = "&LEDStatus";
5 k1 _- T- F  j& J: K$ }Cache.initSize.l2Size = Cache.L2Size_32K;) l4 @9 [- v7 P5 C) H4 {

4 n& i6 |( \; h; j. q. }
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-23 09:02 , Processed in 0.044761 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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