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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

( z' N" G. `% k( ?+ ~/ M    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256+ C& y, }' }1 L: |$ g' }4 I

# [9 i5 j5 C& L4 B/ u/ n其他程序段。。。。。2 l( ?) U6 j% ?
* a! T5 Z  u  l. B
   free(x_d);
( `+ p+ z) A8 c/ X0 S+ _# s  X" J% t$ ?4 Q* R
使用DSP侧单独调试功能,验证动态申请没有问题,% O. M9 }) ?) o3 \9 K+ h3 d3 f

- V% l4 @+ X, o7 B) y; {: E但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。8 X0 m5 X( |! A. J5 T
( h% o: R8 P7 t6 D

2 h3 Z( j+ m) Q1 g. D. ~3 o4 O/ n& T

( X+ x+ z$ n/ Y) k7 _
& H, F) \0 N! ?  n! Y" L3 b% p6 T: x0 r/ D# A

! D5 c% A1 A" m* Y
# F; }' _# _, T9 b9 F) m5 r+ C9 O0 U0 U1 n! H
  X# d* u( A, x6 j
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
: s$ E: U" \+ Y6 p3 x! G我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
9 D8 C# `9 W( o: Q  H(不过疑惑的是,为何单独DSP仿真就没有问题呢?), [  [  V  {1 A$ e

* j3 c; k/ y: q% j% H# D$ l% U  x是不是需要在DSP.CFG中进行配置9 m# N& \0 H+ O; `, o3 f
我现在的配置为3 ^# g% o! S# X3 V% h5 `
# ]# u3 h3 b, y. X! A7 b( R) S/ f# F' t
/*; ]) I" K  M* b9 I* P( y/ ]8 [
*  ======== Operating System Configuration ========6 l& r6 y$ o' n$ [+ F6 i
*/2 D. \4 ^) V& n8 x

) ~0 K2 H5 q1 _; J7 F6 ^/* no rts heap */* P; m  f7 f  c3 \
Program.heap = 0;
2 T. Z3 Z# ?9 A9 e6 fProgram.argSize = 100;  /* minimum size */
3 \# U5 O/ B+ GProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
/ w: A8 }9 k* |( z3 r- t
9 z: W( K8 D* ~9 T5 k/* create a default heap */$ Y  A$ K) G, b/ v! f
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');7 O- ~7 W; }( V$ }6 F5 j$ v
var heapMemParams = new HeapMem.Params();
1 w1 q' n; X; R( T  theapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大2 X: m) N& {) V" e2 G2 ?9 P' Y

6 ^+ ~; b& o  H
var Memory = xdc.useModule('xdc.runtime.Memory');" R: U, z# T5 {3 x5 S" L6 Q
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);' J2 J- d2 R2 E8 r& d

+ ~. u' P* n, I& ]/* configure System module */
* Q+ R4 u0 \2 @3 y2 Vvar SysMin = xdc.useModule('xdc.runtime.SysMin');
; H% L' k) z: U4 q' _SysMin.bufSize = 0x1000;
) [# w4 C- _' t( N0 FSysMin.flushAtExit = false;
# }" ]( Z* T  Y* Q" C3 u6 I0 Z( i; ~- d; o! M
var System = xdc.useModule('xdc.runtime.System');% l6 n5 z$ f% N; i; b
System.SupportProxy = SysMin;
5 u' a: I" _6 r
) {) X- n( C; `* C/* configure SysBios to use the lower half of Timer 1 */- R& W* e" X( C8 o( ^- j
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');# x# T2 L' U/ |5 x
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
0 j9 B7 u3 r8 [2 F! {Timer.timerSettings[1].master = true;
2 g8 d- S4 x+ n6 k+ n  ?Timer.defaultHalf = Timer.Half_LOWER;! K0 J# p+ U7 T, {$ [
Clock.timerId = 1;7 w: u& Z/ }7 \, W7 B

. _+ {; r; k8 ?0 Z
& x: f  ?/ x9 E) j0 O, V9 D/*
4 H, J9 X3 ~# s' M0 H, n8 E0 [ *  ======== Miscellaneous Configuration ========/ a" L) G6 D% ]1 P1 T3 a
*/3 j: N; r9 n8 T$ M" T1 t; W
, \9 P8 R+ H( i" d9 U2 k. m
/* set default diags mask */& o- F4 A! v& i4 u& c
var Diags = xdc.useModule('xdc.runtime.Diags');
8 Q$ _6 ^1 n8 o0 H9 R% {var Defaults = xdc.useModule('xdc.runtime.Defaults');- B8 W' E/ m0 t  E
; ~% R1 ^3 F3 G
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
9 {/ |4 ]) |* B, ODefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;2 ~* W* Y. Y" n* H
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;  R4 G' p, |( R0 S; }
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
* G2 N2 s# B+ i9 T$ pDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */, f+ E9 B/ Z- Q' b8 O% N- n8 J
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;' R6 Q/ b5 ]7 B4 o  i8 @( W$ _
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
- w- b/ R* p" a" |4 G/ bDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;8 t8 f, y, K# H$ E2 R" G7 O
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;6 c2 d, r6 W+ z, V, ~$ @# u
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
: z# u0 F0 W# d0 pDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;" @% G/ a( T! {7 p
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;- p# S1 H& S; ~2 x. \# {" E, K" y
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;$ U, z6 w: D1 K. m0 s* m; h+ |
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
2 L8 w( Z6 ]7 S* Z8 U& w( J0 ^1 [
% i6 I! |7 g' `3 a5 \( J/* override diags mask for selected modules */0 y1 Z% d0 B- J' V: M
xdc.useModule('xdc.runtime.Main');
- |, h9 _/ Y4 \2 @% P) U  i7 |Diags.setMaskMeta(
5 M: `; v# z  C  P$ L8 p    "xdc.runtime.Main",( v, ~- q0 |0 P& u$ H, _$ a
    Diags.ENTRY | Diags.EXIT | Diags.INFO,$ h4 ?+ f5 N+ M0 j, A& {5 A
    Diags.RUNTIME_ON
  d$ j" X+ V& `( q+ y);! s9 j  s  |$ ^5 [

* J; `9 h9 F7 Xvar Registry = xdc.useModule('xdc.runtime.Registry');
' G- u+ B9 E3 _8 F# VRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
: G5 H4 M, n4 s# O4 qRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
5 |" v7 M, o1 YRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
$ q' K7 P& Y" F3 H3 jRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
" s! w% M( H2 W4 U. T3 L- ^3 y1 w& z6 @+ p
/* create a logger instance */
7 ^- ]( j5 [1 s- h9 A# M) Z8 Xvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
; u. K& v% _+ q8 fvar loggerBufP = new LoggerBuf.Params();; ^, c/ e, q. x, T4 l
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
2 e: M# J; g  |loggerBufP.bufType = LoggerBuf.BufType_FIXED;2 D( L* `0 f5 B. V% u  T+ u2 A: @( U

" O8 _5 G+ C9 A6 `5 [' t0 ivar appLogger = LoggerBuf.create(loggerBufP);
0 I$ p+ G7 ^  [* ]appLogger.instance.name = "AppLog_Core1";( k) b  s* q3 i4 m8 i& W
Defaults.common$.logger = appLogger;# X' O' b" W5 J, @. _* i- v  m
Memory.defaultHeapSize = 0x8192;   
( n9 ]3 g, D9 A1 gIdle.idleFxns[0] = "&LEDStatus";
/ @4 `& a: S  K2 H3 h7 ^9 DCache.initSize.l2Size = Cache.L2Size_32K;6 a, X6 o' e/ E1 h6 V
, U7 k5 ?# B+ ?$ y9 m0 l
回复 支持 反对

使用道具 举报

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 */
; ~4 d% V' V' k% e; Wvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- ]2 l% b  y: Y) {/ @& b. Rvar heapMemParams = new HeapMem.Params();
  b* _; a& k: n8 P& X6 ^8 oheapMemParams.size = 0x4000;
+ C# O' Q6 W0 B7 M& w. g! T; c- N
0 ?$ g5 K  S# G5 J  u* Tvar Memory = xdc.useModule('xdc.runtime.Memory');
% d" ^7 s4 F7 T3 N+ T, wMemory.defaultHeapInstance = HeapMem.create(heapMemParams);! h% j( X* T- U/ p! j( B# @, V

5 r' h. E% M5 r. i6 y( W我大约calloc  每次共计大小为5K*16bits,% s9 a4 l1 c$ k4 l2 A
而默认配置才0x4000、需要改大。
; S3 L5 o  |" i- F, @9 q
# h, a6 j+ Z5 \& [3 S1 F0 }
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */. s: p7 `7 t+ ?5 f0 d. U9 P% f) z
Program.heap = 0;; a4 c0 X/ q1 m0 f$ D6 `& ?. a
Program.argSize = 100;  /* minimum size */
* E* a/ _; g: F& A/ o2 RProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-17 19:25 , Processed in 0.040786 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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