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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
; B4 V  f! y7 ^
7 ]% c( g; [2 C4 q    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
: @- f$ g8 F! L0 N: H0 L" l# @4 J* ~$ ^0 S$ e1 J
其他程序段。。。。。+ n. |' m& I' R
9 E6 s( O  P7 ]# r
   free(x_d);
- h+ w7 H1 r$ X0 {7 e1 @- H4 i6 ~( {6 @& {
使用DSP侧单独调试功能,验证动态申请没有问题,, ~3 }' Q, F% h( t1 p' k7 `

8 z& s. u2 T$ ^. Z  H但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。& v/ `0 f7 }  q

9 @$ g  p; R: C+ R. {, Y( @5 L3 a+ n5 s3 m; c1 p" Y8 d

8 U, Z  |  c7 r: o7 t1 b$ n* d& |6 {$ f8 X2 F
# t5 l+ t* j, f

& G  E* B# b& z& p' l+ S+ F& F, |1 N
7 R/ G2 S7 w' M0 V
0 L6 c4 Y8 \- `
& V& w: S5 L* A' Q% Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明& }1 M  n; s" n; f4 p' F
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下, e, C5 a( ~6 X
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
) @3 f+ t1 {5 _; L- f/ O1 f* A

: l0 a- `% }1 V1 M1 C是不是需要在DSP.CFG中进行配置
: P9 F. Z+ e+ n7 |8 t我现在的配置为4 W" D" a& a, d# p1 D: A
# ^4 S/ b& J& @/ K8 ?
/*
9 ~* Y3 T7 m. ^* O *  ======== Operating System Configuration ========4 a2 f! d/ C2 Z8 {' w
*/' j( h+ w) u5 N( e- u0 }3 a

2 v% G, b0 R6 w. n  K* ?; u/* no rts heap */' ^) P* T! T& E2 r* ?
Program.heap = 0;
# x- p; w" T9 |7 ^$ s8 I2 mProgram.argSize = 100;  /* minimum size */; D- s! `& D" i
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大/ X& Q# b4 N8 C' O) Q3 n( R5 M
$ ]  a) ^: b* Z+ W1 R7 t
/* create a default heap */
4 Q' e( ~; [2 g: V" n) y$ Z' a) {var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  x: R7 S- @# y) u' I
var heapMemParams = new HeapMem.Params();6 p/ y3 z$ Y$ l% ]) {2 P1 R
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
8 r1 p' q6 u$ a# e+ G" N: Z& c1 |
* z* c+ ^' f$ P  R. ]; A/ x: D
var Memory = xdc.useModule('xdc.runtime.Memory');
# j6 S* u; @3 sMemory.defaultHeapInstance = HeapMem.create(heapMemParams);$ j; q$ g! U! v$ @. F' _1 y
7 u8 U$ z1 Z) K7 `3 N5 V. N) H6 E  O8 Y
/* configure System module */- n3 [0 K' z5 ^+ m7 @
var SysMin = xdc.useModule('xdc.runtime.SysMin');
9 z1 A! v2 _3 F' V: X: ASysMin.bufSize = 0x1000;& b# X7 F- _% k
SysMin.flushAtExit = false;
, F& S* i, N  ~* Y% D7 k2 w* i& p% M; q9 ?
var System = xdc.useModule('xdc.runtime.System');
5 @/ T. @2 B; D6 [6 TSystem.SupportProxy = SysMin;: t. J' S" {' V

+ F2 W& K' ?; O/ m( T1 q3 e/* configure SysBios to use the lower half of Timer 1 */' U$ x/ V$ ~; ~& {
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
2 W; m5 q4 h5 w0 ^& y. G0 Kvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
) b" [# v' w1 e/ B) p; W: W" d& XTimer.timerSettings[1].master = true;9 y/ q4 ~/ U# {1 w- F. G6 U
Timer.defaultHalf = Timer.Half_LOWER;
1 i( ~. ?7 p% c% q6 _# ]9 j4 }& _Clock.timerId = 1;
- @$ I7 j1 G# l% h1 ]& M
- B4 A8 v, ^# @& f  G8 _
+ n1 C8 c/ F4 u/*
; X# f1 ~, l: ?/ W2 V- j3 A *  ======== Miscellaneous Configuration ========/ |5 G( f/ l9 V2 z/ S: e- f' K- D* a+ U7 U
*/7 ?5 q  x- q6 z# D& W* P) t0 ?) e( p
3 g% d1 E, C9 V. V+ s9 T
/* set default diags mask */
( T! v0 c9 P4 ^& W1 Fvar Diags = xdc.useModule('xdc.runtime.Diags');
1 ?# m' ?) ]" B. o7 L) yvar Defaults = xdc.useModule('xdc.runtime.Defaults');
% C5 x, \% d3 x/ `$ U/ ~/ n
7 Y* @4 }- o- |7 aDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;+ {# o: O6 B; i8 Q
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
3 x) u5 A$ c4 U+ w3 vDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
5 O5 y* E- o. d3 G: uDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */" P) z! }9 u0 M; k
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */* g5 z7 q' ~8 i$ [7 U4 d
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
/ E( l; \# D! b1 Q7 l% b6 a4 }Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;; ?6 `4 B: v; _/ ^- x, E4 j9 N
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;* @8 `: }$ F' U* a
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
) h  r$ N* j5 A6 m3 \# _Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;7 x# t9 d) C4 v
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;: L- F+ a2 p5 f( _( w
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
! T& k/ O* V$ s$ a4 R. aDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;% x" ], m2 q: ]3 r
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
: D$ z  I  N* y$ S0 q9 q1 `: D0 g$ h3 v
2 X1 P7 V9 O  F; [/* override diags mask for selected modules */
1 F% k4 L5 Y$ Fxdc.useModule('xdc.runtime.Main');
( D) V: J$ s6 ], n+ P1 I+ X! ^Diags.setMaskMeta($ h( j; A. V7 t$ s
    "xdc.runtime.Main",
2 K) I: Q9 t6 E* Z    Diags.ENTRY | Diags.EXIT | Diags.INFO,
2 U( Y) w9 M7 J. \1 I6 M  W' l8 Y    Diags.RUNTIME_ON
8 T( W) }. b' A; @);/ i( |0 i- h3 F$ p7 ~) h3 ?7 ^! g
; ]$ ?! A% B1 ]& p
var Registry = xdc.useModule('xdc.runtime.Registry');
8 i# _) E  l; X" y: A0 d: Y4 D% @7 sRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;4 s) D* u1 s9 H; ?# g
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;5 W: B; R" q' h8 o
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
- K- M! x- q# fRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
1 q0 P. P$ ]9 R2 y! G9 t/ w
% r6 H2 ]# v& Q& W4 }/* create a logger instance */
2 z' K" D! f: J/ k3 S3 l2 Y# Jvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');8 [5 Z9 S2 V, A- j- o3 g! c
var loggerBufP = new LoggerBuf.Params();( I* T0 I4 s! i0 k5 n% a
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
5 I, s0 }1 X% {& S, CloggerBufP.bufType = LoggerBuf.BufType_FIXED;# u' n9 e& G# Y) Q* m. W/ ~; H; U
6 L& z/ P2 _4 u) b" q2 X, r! i
var appLogger = LoggerBuf.create(loggerBufP);. L- V5 E6 A: R: w. `: R( c* m
appLogger.instance.name = "AppLog_Core1";
  u! P0 A0 G7 Y) J$ EDefaults.common$.logger = appLogger;: `/ x7 @+ q- B
Memory.defaultHeapSize = 0x8192;    ; K1 B$ K; _) a( q8 |' I4 D- Z
Idle.idleFxns[0] = "&LEDStatus";  L8 F! W. g$ ]! R3 |
Cache.initSize.l2Size = Cache.L2Size_32K;
* U' P3 ~2 W( ]% h  H- V
! R& i6 j& d. L1 @0 N' W
回复 支持 反对

使用道具 举报

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 f: M2 D+ u$ }3 A
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. |9 N7 ^9 y9 T' Z/ t# {6 b& S: n
var heapMemParams = new HeapMem.Params();
6 R  ~  d7 K% p! y( H  p* R2 FheapMemParams.size = 0x4000;) P7 Z7 B+ I- n4 c8 r
$ r% Z" M$ x+ X
var Memory = xdc.useModule('xdc.runtime.Memory');
  R) _% k: Z$ T/ `5 _Memory.defaultHeapInstance = HeapMem.create(heapMemParams);( a8 h4 I( N7 o4 m5 S
4 o9 J" ^; B  W- ?1 a0 N
我大约calloc  每次共计大小为5K*16bits,3 x. K1 q$ {5 w; X
而默认配置才0x4000、需要改大。
' R* g* Q& w3 A/ v) B0 j0 [/ H
1 d% e; A2 Y" b; y
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
& f2 J0 z- i6 ^- M; B+ QProgram.heap = 0;
" G( D/ m& t  rProgram.argSize = 100;  /* minimum size */
/ `9 h' r$ h! f4 ]1 w9 cProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-2 06:18 , Processed in 0.044662 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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