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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
( D# [( v! _" u  {8 N; B6 q4 o
( @$ j- d% [- J2 ~    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256) H0 M3 O: x( b7 J
2 V: m* j, A$ a. z' v
其他程序段。。。。。. E, f3 v8 s7 M! T
3 g' T+ }# ^3 g. C8 _: x1 N
   free(x_d);" i2 W2 R( v0 m; k/ K* M$ K! T! ]
( Q4 G4 t. l& Z/ j4 h; a  L
使用DSP侧单独调试功能,验证动态申请没有问题,
: I8 i2 }$ s% n9 ^( }/ Z' H( r7 n# H+ ~% M4 X8 e
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。0 h# h. u9 q% H" |7 Y
, |3 t4 j/ B! O! C

3 S* {6 T: |0 I% s1 n/ |3 E4 l
' U$ J. w$ W9 d/ S
3 s8 E% E% a1 h4 V/ g
0 E% M, {4 i2 x
, _/ _7 C+ R) g, K, o" r9 r( b
; M9 A3 ~4 G0 _. I) o" p( P/ [2 ?. _3 K8 F/ l
% U* d  Y$ V. L. [' l$ i
+ r5 H$ g1 b2 l& ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
0 s- h( l7 B8 r( d" B1 d. `我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下+ Q; q, L% y5 A7 }0 n1 N* E
(不过疑惑的是,为何单独DSP仿真就没有问题呢?): J2 D2 S$ D* V9 Y, V

% ^+ Z5 H& v. K& y) z是不是需要在DSP.CFG中进行配置
+ b1 V; V: U8 m1 N  F) {8 O4 `1 w: b2 z我现在的配置为
$ l; T, e. ^5 w; s( B: ]
/ N3 Z* T9 F: ?7 }/*
8 g( G+ l8 X# i& i& a& I2 ^ *  ======== Operating System Configuration ========
$ c  m9 g& {1 N* f2 y8 b */
8 S9 u* r. r) l% u) L
. a- M, x5 K7 P, _& d/* no rts heap */
0 t$ A" h* b, n) Y; tProgram.heap = 0;1 ^5 R5 H% V, f5 J! P$ Q6 T( F: e( P
Program.argSize = 100;  /* minimum size */
; c0 i& u" \  J* q/ e  L/ wProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大/ ?  ^  |8 g; S: }

0 q. ]; ]8 u5 w* }& g) J( i$ ?$ ^% ~/* create a default heap */
  u. i0 x$ a$ L+ ?2 |var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');, g  ~% B( ?  J" D7 D
var heapMemParams = new HeapMem.Params();
0 k" y1 }; P0 N8 DheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大( Y7 D$ R) H. G8 A% s

; H7 C" Z  p: D! O' l2 Y
var Memory = xdc.useModule('xdc.runtime.Memory');
+ R) W. q' ~; Y: j  A% i( ?. pMemory.defaultHeapInstance = HeapMem.create(heapMemParams);  Z' y& v/ _* G. C
9 {8 |5 a; i1 O0 M6 q  Y
/* configure System module */  S( z4 T# C1 [. k0 ?- A. _
var SysMin = xdc.useModule('xdc.runtime.SysMin');3 K3 U0 }. K! a# Z, j$ |
SysMin.bufSize = 0x1000;0 Z6 f" N0 S& W7 L8 w2 ~  B( _
SysMin.flushAtExit = false;* \. x+ L: s$ n9 m0 R
0 M2 x* a) F/ U
var System = xdc.useModule('xdc.runtime.System');
8 T! C( A. g1 j  GSystem.SupportProxy = SysMin;
" P" t( X0 o1 e1 r. b+ t% k
4 ?  o, A+ i* N1 P/* configure SysBios to use the lower half of Timer 1 */
$ ^3 `9 T, E% `var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');& `! `1 a! G, r4 u
var Clock = xdc.useModule('ti.sysbios.knl.Clock');; c& a1 ]3 O1 I3 d2 _
Timer.timerSettings[1].master = true;$ d/ Q' I+ Q8 ?$ D9 e% `
Timer.defaultHalf = Timer.Half_LOWER;
" l8 U( |, t6 J- C& XClock.timerId = 1;
5 t2 X5 P8 }2 Q3 ]& V* j, L4 E
$ @) f! _# P2 `( |9 x) e7 C( \3 j% H- A8 w$ A4 M1 g* m
/*2 {6 O* T2 i! G* Y" [( s
*  ======== Miscellaneous Configuration ========# ~7 Y( p! N6 O3 {% U5 n
*/1 k2 T; {) ~7 G' D3 y
. }6 V2 g+ h. z5 s* _
/* set default diags mask */
6 ~6 i; Y0 ]  vvar Diags = xdc.useModule('xdc.runtime.Diags');3 k# N5 q) f' I2 `0 ?2 B- F
var Defaults = xdc.useModule('xdc.runtime.Defaults');
! n( x1 y: d- r9 ?! z2 y# n% f- X7 M; e5 [# z
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;# x& x9 i4 Y4 L2 |' h! R; _) l: [- H% x
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
$ \. b2 n3 S5 cDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;% u4 c: o! Y7 p2 J
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
  {% g, I( L; fDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
4 s+ p8 G7 T9 Z2 u/ O& {3 ]Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;  Q8 e( d4 O0 o) w3 h
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
& |% w. Y2 s* TDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
2 f" n0 I& ?. h, F4 w; W, ^Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
6 ~$ X4 U. F* E+ d4 UDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
' o$ r7 w0 `9 y. b' i" M0 w; u7 qDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
; Q( ]3 k" V# QDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
# X$ t5 }! g$ k+ e4 J$ H7 M+ jDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
2 |9 A, }6 _) A1 HDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;# A- y3 F) {; H; r: e
% L4 B+ W1 o" ], P( a# E2 o, ~
/* override diags mask for selected modules */
7 J6 Z! C, V& s  [3 |( f. ~xdc.useModule('xdc.runtime.Main');8 B, e8 q7 b7 g2 N* f$ p1 z
Diags.setMaskMeta(
5 Q2 a2 D- _( J3 ?& O, |    "xdc.runtime.Main",
) ?+ o8 ?5 t! a0 _% U( N    Diags.ENTRY | Diags.EXIT | Diags.INFO,
  z- E  _& u2 p- m    Diags.RUNTIME_ON0 T( @0 \# ?- s, K: s  L, j
);
. w8 B/ s: q8 ~- l/ C$ o, ]
* r% [$ j0 ?- ]+ O3 ?, U7 ^var Registry = xdc.useModule('xdc.runtime.Registry');
  k9 x; F. G' ]0 Z5 P4 ^Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
) X9 W6 P  S. Q/ XRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;) H7 H% ~* H+ d) ]% n; A$ h& d3 e
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;0 b$ b" t% t  X, i
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;% e$ H. }6 {+ F; \+ [# Z3 }
; }- t; C( T3 A$ ]+ M2 m
/* create a logger instance */# U3 u: F% g3 j! {( x# [/ M
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
9 o6 y) ]# T3 b: D" bvar loggerBufP = new LoggerBuf.Params();% p9 X. u/ ~" r; F
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */. D' u* f4 C7 C7 k# p6 h' o
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
$ B' B* M, y8 O% {
5 K2 _) Q4 N! ?- q1 o  ]var appLogger = LoggerBuf.create(loggerBufP);
8 }! H7 z! ^8 x$ m  X  ~* B" MappLogger.instance.name = "AppLog_Core1";
  n, G8 w. |/ C% UDefaults.common$.logger = appLogger;
; k. J4 t5 Y$ R+ O. y6 kMemory.defaultHeapSize = 0x8192;   
# `8 c9 V8 e3 @  nIdle.idleFxns[0] = "&LEDStatus";3 f1 Y" T! Q. E% a& R& r
Cache.initSize.l2Size = Cache.L2Size_32K;
; n& e, H& @4 ?. N  B8 A5 j. X* _* B* u4 Y; 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 */
8 u* J# R! Z, {/ `; Zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 T5 e3 B# U; |4 H0 D/ {var heapMemParams = new HeapMem.Params();. x5 ~  {5 e3 ^5 E+ ~. X
heapMemParams.size = 0x4000;
# _6 W$ Z) \: E5 i9 P5 l. `+ |7 W
. R! ?1 @' C! R4 `/ t7 n& ?$ _7 V( Ivar Memory = xdc.useModule('xdc.runtime.Memory');. F: a4 S+ J$ ^$ y! w2 N
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);4 h- O( U" F9 h
  ?. P/ l: z. l; u; w7 v* J- d" w5 y6 h
我大约calloc  每次共计大小为5K*16bits,/ Z2 K" u- [2 q# ~4 I/ [. T) a) T
而默认配置才0x4000、需要改大。
1 Y% l/ M7 X6 h& X) ]- m- g  p/ ?& K0 k% U# g
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */7 H. b3 l0 m6 T  B6 I4 f! z) @
Program.heap = 0;
- S, f, g4 B" a, P* p  WProgram.argSize = 100;  /* minimum size */  R' S* M. H/ U& N* u% q- a
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-17 17:58 , Processed in 0.041878 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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