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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
! @! y5 i* v/ `+ o2 {4 h
1 W9 k2 d/ x; Y    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256* I2 `. c# ?' y; E, N  T8 o
% n3 r" s# }5 }6 V% h
其他程序段。。。。。# D7 O8 S6 s1 p: |* d

) d) ]! k, n! J/ E- Y$ R0 x   free(x_d);
0 g3 i9 ?) Q  U7 H0 N+ s! i7 q4 x  O  J2 ]" k/ f
使用DSP侧单独调试功能,验证动态申请没有问题,
! E0 M* A; |( p5 @
3 s+ u; ]# f* K, S4 `7 n, g+ p但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。4 B" A# H: q5 T

# V4 d/ m" ^, ^$ @" s6 M. m+ H* U. Y/ x& q8 H* R: f( L# I

; x* V$ g6 h, |: R; W) ?3 W/ K' s. i  F! F2 c# K
/ b$ t% a8 p; q
1 Y9 ^3 }  z4 X( B/ r
& `# |% m) `# Z# V% h$ R6 X+ H

: H: g/ I9 u" {5 p& O+ i4 o7 A* G7 |4 z% O+ p/ z

6 d5 n0 w3 K( T8 k% B0 S* ^6 H- g
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
  U+ A1 J! l' p7 A4 ^' \我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下8 ~# A) i( k/ V: |
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)0 Y; P/ X( {8 C/ K

( O' D. l0 A9 b$ G9 C0 u  J是不是需要在DSP.CFG中进行配置9 X9 l6 y7 T1 d: A( i! ?3 |1 k
我现在的配置为
9 H* t; M% j# q: h5 G% `; f( o. N; f: o" Q8 S+ W% f
/*
" k1 s. v! z1 o! Y: q  o. E  G+ k8 Z *  ======== Operating System Configuration ========
& E1 [  i9 O% Y6 r7 J7 s */1 ~' K2 P9 s, F
! n! N8 c  N0 T6 p+ z
/* no rts heap */8 }9 R* I: W$ }  s
Program.heap = 0;
* V, j. O3 D$ t& `2 rProgram.argSize = 100;  /* minimum size */
9 @1 v5 \0 r: o' j( JProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
4 B0 u; _+ u& k2 _/ {2 s& z. _$ x9 M" z6 ~  n8 k
/* create a default heap */
' }# m: B1 Z! x6 C3 nvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 o6 L- d. L- Y" d8 K
var heapMemParams = new HeapMem.Params();4 q' |0 b& O1 x) h2 _2 _6 A. ~& p# J
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大. g7 v3 u9 i2 R5 C9 G. \2 `

, J0 ~% V7 T* i! ]7 x
var Memory = xdc.useModule('xdc.runtime.Memory');
4 G) c" E' M) u0 |. FMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
% @/ R2 N: T) o6 B. a: Q* ^' I; Z9 Q; Y8 f) ~6 M0 `* f
/* configure System module */
6 M8 a4 j9 o) l0 Z! s2 F4 E& y, Evar SysMin = xdc.useModule('xdc.runtime.SysMin');, @2 ^+ g& G8 Y
SysMin.bufSize = 0x1000;
! \- o% W: c: O: a% ^' dSysMin.flushAtExit = false;
5 D6 C3 {9 j  }+ J! |0 t8 K" V; c7 h
var System = xdc.useModule('xdc.runtime.System');/ Q% z) K% v& m# c; M! G
System.SupportProxy = SysMin;
- f3 u- C0 i& m! ], \& r, C7 {4 w( e! J" O9 {
/* configure SysBios to use the lower half of Timer 1 */( I1 [3 k. ^( W! s" K
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
3 w5 y6 L: \3 m( @: ^var Clock = xdc.useModule('ti.sysbios.knl.Clock');
4 P6 O" E: y1 m' b0 @6 n' P9 z$ LTimer.timerSettings[1].master = true;
" M4 |1 E- B  ^, C, T& fTimer.defaultHalf = Timer.Half_LOWER;
$ J+ e& K5 W5 AClock.timerId = 1;
% `7 [+ _9 @( S6 b3 E9 T, R+ o& }- B) Q

5 }0 L1 F3 k* X" x" e2 L/*
$ p" n1 }+ o9 A! H *  ======== Miscellaneous Configuration ========
$ W( {0 ?& v0 U# P3 `  u  u+ z *// v; A- w& U) f. W

5 g' t, N. I8 j! C+ F8 V/* set default diags mask */  `( \) b' ]7 C
var Diags = xdc.useModule('xdc.runtime.Diags');( y' M/ j2 Q: }( {9 D
var Defaults = xdc.useModule('xdc.runtime.Defaults');2 ~+ M3 Z1 r. c1 K0 C# x
: L/ H: w6 \* a0 {$ ^
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;: c) w2 `* {/ g" l! `2 G
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
% Z$ H6 j: [5 s1 F( d, p  G  E% oDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
6 T$ V" Q5 F8 d' V, I" y8 C9 o; NDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
- [5 u. C, c5 g3 F$ b7 M, ~Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */9 v# ^+ g5 B2 k3 H- w% a
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
. i0 `! K  H, V7 o. ZDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
% H4 d- J  l4 T) y5 A/ C. D1 r; M. RDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;" Q! h' ?3 o( Y& y4 ?- R- ]3 u
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;( Q) x+ @) l7 C( N/ t  W
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
+ X+ m4 w: m) i* \& IDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
$ g7 q3 t9 s# ~7 a4 p$ BDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;2 v/ d$ c* |! I$ ~2 A) J
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
8 \' I. b: U: T) z2 hDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;5 s4 s& H$ R( \8 u) q+ l
& [) b$ K6 J" [5 @% |4 x1 P
/* override diags mask for selected modules */+ v6 b1 m' h6 A# w8 K  ?5 x
xdc.useModule('xdc.runtime.Main');
0 V, z' Q. u3 C0 m2 s; r. z$ j& XDiags.setMaskMeta(
4 T/ Q0 Y0 \- c; Y) O! Z1 }; a    "xdc.runtime.Main",2 }  B9 s+ e% H* \; L. E4 {# a
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
9 Z$ U7 Z) R0 |& J    Diags.RUNTIME_ON
( W# f1 @- G" D( ~. S% E# l* z);
/ [0 A" p/ v! h2 n+ v5 t: {$ g9 C: f# f4 p( p
var Registry = xdc.useModule('xdc.runtime.Registry');
& A, {1 N# c; B9 p2 _" |1 J  ]  XRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
' G+ j  j' U, V$ RRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;* b; Q) i: T7 |, m9 Y6 W* z: `
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;. h; E! Y3 D4 q7 t  q7 K) O
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
! T! H* \$ f; x& g! _8 J3 e& y6 l
' z2 x, I5 C. p8 a9 o6 W. }/* create a logger instance */' ?- |2 d2 \3 \* R8 z0 b6 \
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
7 A6 l3 L* w5 R0 ?var loggerBufP = new LoggerBuf.Params();
; d0 F+ h- {9 X8 rloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
4 W% @" n: {/ Q. W6 p: FloggerBufP.bufType = LoggerBuf.BufType_FIXED;
1 c$ p' k9 ?$ g, V
. q+ z' ~1 L! W5 U2 @1 lvar appLogger = LoggerBuf.create(loggerBufP);  u+ R2 J7 ]) J2 ]  `
appLogger.instance.name = "AppLog_Core1";
' U8 n1 M* T- jDefaults.common$.logger = appLogger;$ g7 l  \# `2 C5 H, m2 P: p
Memory.defaultHeapSize = 0x8192;    ) N2 P& j) e5 a8 x
Idle.idleFxns[0] = "&LEDStatus";
$ L# M. m/ h& a' g# t% HCache.initSize.l2Size = Cache.L2Size_32K;
6 U8 H* H/ Q3 C8 w. T% p& C
! |$ [. P4 |- c( ]
回复 支持 反对

使用道具 举报

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 n" o/ a' T5 a
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& m! D) O: O* y7 X  U4 o
var heapMemParams = new HeapMem.Params();
3 F1 s4 B! r* W  EheapMemParams.size = 0x4000;
, r; x$ p" R0 i! ?' H! J. @0 O0 j
( D- W( k3 M2 k* k# L9 @) P+ Yvar Memory = xdc.useModule('xdc.runtime.Memory');7 Q" d6 e. F: O& d% f/ e( u
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);9 g8 M9 z0 n6 X. T# R) g% H% S
6 g3 W' B5 \7 x. r6 a# x) c
我大约calloc  每次共计大小为5K*16bits,
6 A0 U# C0 r% o- V) z$ ]% W# V而默认配置才0x4000、需要改大。
0 N8 U( |* i) ^2 ?& W- _* ], z; r" I5 X$ H
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */) Y( s, K% ~' m# @
Program.heap = 0;
: J0 N5 ~8 N1 A% F5 J  P7 D' [  PProgram.argSize = 100;  /* minimum size */
; W& J1 ^) l9 d6 U8 t% T0 d" xProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-1 18:23 , Processed in 0.042328 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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