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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
3 V1 u' A( n) V! w8 y% o7 D+ `$ L; o2 I+ v1 X# u  I+ F
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
( [; N( r0 W0 J6 C, \) `- P) r
. @+ G& L6 E; z$ Z. I1 z其他程序段。。。。。( ?/ S; L+ q7 E; A5 f* V
: h# j- `- _2 v7 E/ i/ E  Y( C5 Q, @
   free(x_d);# [( j. ^+ V, _9 n; f* ?: i
* k# V; C0 r: |: V: D0 w9 N
使用DSP侧单独调试功能,验证动态申请没有问题,/ W: p8 e: R: o+ r+ t

2 ^$ N4 o( J# I但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。$ K. l4 X9 n. `6 h( d

, ^% W8 `4 Z9 [+ X+ o% W
2 F& Q1 t+ H' O+ O' y- n; l7 v! I" q- b( d

1 e- H5 R# O+ L+ b$ p) R9 @& A2 P+ y' S5 A/ f$ w0 Y

. ^* x8 v# d! O6 w, n  \6 M" F! U4 Q3 G: E/ O
8 c& z# d- n' `: H$ {# }+ T" C

$ G, b4 z' _& a" ~  [  S7 Q" F% d
分享到:  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 */. l8 d+ v: y! s: `- x
Program.heap = 0;+ D' A& ~+ K/ h9 S5 J: \% [
Program.argSize = 100;  /* minimum size */, [( |% t# g- Q, E5 H7 k8 M9 I" ~
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */' z% K6 v' Z( [: g  l
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
2 \5 o5 z( h6 Y% j( Nvar heapMemParams = new HeapMem.Params();
6 o" C* K0 ^$ x7 f! S  y7 a7 `heapMemParams.size = 0x4000;
  r" ~1 \/ u% v) z
' p0 I7 E+ V! a7 ovar Memory = xdc.useModule('xdc.runtime.Memory');
+ L3 M- {9 \; L! I2 [. a' A  RMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
, y! H" D4 f3 y& }: f3 Y+ b9 ?5 z  f9 |9 h( p' ?
我大约calloc  每次共计大小为5K*16bits,5 ^& |1 D! G% e, p! A
而默认配置才0x4000、需要改大。
$ N, H5 Z( e0 u0 i1 ]- R3 w) i; G  k
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明5 N6 p, U0 C5 k0 b& c  O' T
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
( A" R; b# M. s( o, y(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
' Q! g  h, l0 s# w/ _4 n

5 @! S. s! X3 ?" M# j* t是不是需要在DSP.CFG中进行配置3 w; P/ L0 Z  N
我现在的配置为
6 P/ C9 J  T; P: D% d+ A! [/ g
( f; v! |2 D: r3 e4 q/*
( o4 g4 r9 G5 a" T: z' L *  ======== Operating System Configuration ========
4 G; e1 ?$ @) Q( c/ K0 l */
) A! r* T7 N  o4 Z* W  b; V1 _: t1 M; L0 ]; ^4 R$ ^
/* no rts heap */+ z, Q7 K& Z* U7 q4 T/ o, s2 B
Program.heap = 0;7 O. `! o1 `. X* C( N3 t% _9 `) y/ a. {
Program.argSize = 100;  /* minimum size */
) Z( Q! ]- Q, g6 p& I9 Y9 WProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大9 |0 v4 w. j3 U+ q& S9 Z

% t/ \9 n' m3 f- P4 r/ ?9 ?2 ^4 R/* create a default heap */
  X# b3 V' E, [- Z. L' |) z* f* d- ]var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 p2 Z1 N* K2 f5 N- x" l! F7 ]
var heapMemParams = new HeapMem.Params();
4 F, F" ?% w6 O$ \" iheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
, A- ~' l' s/ b/ g- X) H2 m6 S* H% q6 u) X- P
var Memory = xdc.useModule('xdc.runtime.Memory');
8 m) x% q! l0 r! f5 i# i" cMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 ~+ ?8 y* D) |) P8 ]9 Y
  g4 G6 q; d. O3 ^* g% A, X7 k- j/* configure System module */
2 t/ U) _0 t4 K3 q0 N8 \var SysMin = xdc.useModule('xdc.runtime.SysMin');
1 |: G( l) ]  n2 @! `5 ySysMin.bufSize = 0x1000;" C2 p  D" [; L' S2 w% S' N  Y
SysMin.flushAtExit = false;
& }8 g) ~  \. W( l' K% }( W+ X  _- Q% r
var System = xdc.useModule('xdc.runtime.System');) [$ h: V6 [8 B* [$ Y* u& }- M2 A
System.SupportProxy = SysMin;
; T2 J9 i  s7 z, I' W, X) |/ {) H2 c
/* configure SysBios to use the lower half of Timer 1 */
! \4 a4 a& j- x4 svar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');( ]  }- c) f( k8 `5 L! n7 j5 a7 q
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
2 W" p8 Z1 Y! @* B# C2 eTimer.timerSettings[1].master = true;
1 \, Y5 p4 ]6 V  ZTimer.defaultHalf = Timer.Half_LOWER;
$ T# C$ K$ v3 F4 \& Q- sClock.timerId = 1;
  r! {. h' j+ k! r) ]0 }4 T: y* l/ w$ I) `* Q1 F

% x% J  F4 E: Y) n& ^# k, D/*' R) m# X, i! i! }- w
*  ======== Miscellaneous Configuration ========( l: x! C" Q1 h& h
*/
4 c  |* F& v# u5 K9 _) v
7 w8 j# D' d0 x1 Y* I2 I1 H( b/* set default diags mask */
6 s/ b0 X# n* E  o* `: Bvar Diags = xdc.useModule('xdc.runtime.Diags');
6 H4 Y0 ]$ u! Nvar Defaults = xdc.useModule('xdc.runtime.Defaults');3 I6 P- `* g3 g- E2 o: f
% {, Y2 Q7 W# }5 i
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;+ R1 j1 `7 L- V9 C& B* i
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;( Z8 E$ n0 p$ a7 i0 w9 C  N
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;% d' N" {& [9 D: j
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */; F, a' s4 O% b& H
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */6 e9 c# k7 Z3 d: ?+ G* M" a; c7 S- [$ P
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;+ S' Q" p. i% @# S
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;7 ^1 o- S, y0 K3 S. v7 h
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;- p/ C, A* J7 o
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;' C: Z( }, A9 r
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
  ?6 O$ Y! B. e, ?# s) V; m# `: [' dDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;5 F8 H( [! b0 J" Z; h5 H' _* Z
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
! {& A0 a+ l8 g+ J9 T4 g5 C, _Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;! V0 f& q1 ^8 N. E
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
2 j8 ~9 l# {0 Q6 v, K' s  E
4 r6 }3 k% ~6 Q. ?* C/ B- u/* override diags mask for selected modules */
5 z" {) @3 _) Mxdc.useModule('xdc.runtime.Main');* `- v: Q& @2 ?, y5 t$ d
Diags.setMaskMeta(
6 G( ]9 z' u( u    "xdc.runtime.Main",3 b) a) H/ S: e6 @( W2 Q4 p0 |
    Diags.ENTRY | Diags.EXIT | Diags.INFO,& g7 G- E0 z& U6 U" r) m& F0 A% M
    Diags.RUNTIME_ON+ \+ Y/ @. i0 ^0 B" |9 P  Z
);( ^% w, o5 p* V' q
' j9 ^. ]* t% j3 L4 d% j! j/ I
var Registry = xdc.useModule('xdc.runtime.Registry');- ?5 V" R% a8 A& J4 D
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;9 T3 ~2 \4 a& M& _
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
6 w% o4 y, {! zRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;# A, A* N; P. r
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
8 ^6 I! S; T6 P  V$ Y- \) x! Z8 y
1 |2 y0 c* p4 j6 q  g, ^$ v/* create a logger instance */
' D* `' H' x1 Q0 W9 D  xvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
, L% t: {. W) p6 Jvar loggerBufP = new LoggerBuf.Params();/ ]1 _, `; d0 Q- b4 `2 A
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
3 y' o3 C% W9 \4 {0 k, x# X% u9 sloggerBufP.bufType = LoggerBuf.BufType_FIXED;5 v4 ]5 p0 b4 |: |; C
. [; j3 [9 [% J! ^& l( d
var appLogger = LoggerBuf.create(loggerBufP);# u/ y) ~  z& I; d: a# a' g! x' k* E
appLogger.instance.name = "AppLog_Core1";, s! X- D9 I- b) o! O% B
Defaults.common$.logger = appLogger;
+ }4 W. W) X" Q; yMemory.defaultHeapSize = 0x8192;    8 n; E0 E" V5 v! y
Idle.idleFxns[0] = "&LEDStatus";2 M+ t7 g+ l% E) y3 }# w
Cache.initSize.l2Size = Cache.L2Size_32K;& S4 C2 ^7 u7 N, R! e# |1 d' ?+ p

0 j8 Y- U9 k3 c6 ~4 a
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-12 18:15 , Processed in 0.043600 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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